2019年1月5日16:54:31
今天学弟让我看他的hdoj2023的code,然后我很快改完了,但是在hdoj上提交就是一直wa,本来100%AC率被这一题搞的惨不忍睹(当然追求真本领更重要)(内心os:为啥不给看错误样例!?)
然后自己debug,找blog,发现大家都没有说到我要的点,大家确实都AC了,有的人也说了自己wa了好多次,后面发现什么
1.每组数据间要多加空行什么的
但我的wa点居然是 g++平台编译的precision和c++编译的不一样!
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int n,m;
while(cin>>n>>m&&n&&m){
int **p=new int*[n];
for(int i=0;i<n;i++)
p[i]=new int[m];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>p[i][j]; //创建二维数组并赋值
for(int i=0;i<n;i++){
double sum=0;
for(int j=0;j<m;j++){
sum+=p[i][j];
} //计算每个同学的总成绩
if(i==0){
cout<<fixed<<setprecision(2);
cout<<sum/m;
}
else{
cout<<fixed<<setprecision(2);
cout<<" "<<sum/m; //输出每个同学的平均分
}
}
cout<<endl;
double *aver=new double[m];
for(int i=0;i<m;i++){
double sum=0;
for(int j=0;j<n;j++){
// sum+=p[i][j]; // 这里行列反了
sum+=p[j][i];
} //计算各科成绩的总分
if(i==0){
cout<<fixed<<setprecision(2);
cout<<sum/n;
aver[i]=sum/n;
}
else{
cout<<fixed<<setprecision(2);
cout<<" "<<sum/n;
aver[i]=sum/n;
} //输出各科成绩平均分
}
cout<<endl;
int num=0;
for(int i=0;i<n;i++){
bool flag=false;
for(int j=0;j<m;j++){
// if(p[i][j]>aver[j]) 大于等于
if(p[i][j]>=aver[j])
flag=true;
else{
flag=false;
break;
}
}
if(flag)
num++;
} //查找各科成绩均超过平均分的同学
// cout<<num<<"\n"<<endl;//两个回车
printf("%d\n\n",num);//两个回车
// for(int i=0;i<m;i++)
for(int i=0;i<n;i++)
delete []p[i];
delete []p; //释放二维数组
delete aver;
}
return 0;
}
这个code在hdoj只能通过c++方式提交才给过,用一般常用的g++过不了
想用g++提交的话,千万别用precision!用printf!
总而言之,浮点数还是printf好啊,简洁!
附上g++用printf版的
#include<iostream>
#include<iomanip>
using namespace std;
int p[55][7];
double aver[7];
int main(){
int n,m;
while(cin>>n>>m&&n&&m){
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>p[i][j]; //创建二维数组并赋值
for(int i=0;i<n;i++){
double sum=0;
for(int j=0;j<m;j++){
sum+=p[i][j];
} //计算每个同学的总成绩
if(i==0){
printf("%.2lf",sum/m );
}
else{
printf(" %.2lf",sum/m );
}
}
cout<<endl;
for(int i=0;i<m;i++){
double sum=0;
for(int j=0;j<n;j++){
sum+=p[j][i];
} //计算各科成绩的总分
if(i==0){
aver[i]=sum/n;
printf("%.2lf",aver[i] );
}
else{
// cout<<fixed<<setprecision(2);
// cout<<" "<<sum/(n*1.0);
aver[i]=sum/(n*1.0);
printf(" %.2lf",aver[i] );
} //输出各科成绩平均分
}
cout<<endl;
int num=0;
for(int i=0;i<n;i++){
bool flag=1;
for(int j=0;j<m;j++){
if(p[i][j]<aver[j]){
flag=0;
break;
}
}
if(flag)
num++;
} //查找各科成绩均超过平均分的同学
printf("%d\n\n",num);//两个回车
}
return 0;
}
网友评论