杭电2023 http://acm.hdu.edu.cn/showproblem.php?pid=2023
#include"stdio.h"#defineM5#defineN50voidmain(){intn,m,i,j,flag,s;doubleaver1[N+1],ave...
# include"stdio.h"
# define M 5
# define N 50
void main()
{
int n,m,i,j,flag,s;
double aver1[N+1],aver2[M+1],score[N+1][M+1];
while(scanf("%d%d",&n,&m)!=EOF)
{
s=0;
for(i=1;i<=n;i++)
score[i][0]=0;
for(i=1;i<=m;i++)
score[0][i]=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
scanf("%lf",&score[i][j]);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
score[i][0]+=score[i][j];
aver1[i]=score[i][0]/m;
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
score[0][i]+=score[j][i];
aver2[i]=score[0][i]/n;
}
for(i=1;i<=n;i++)
{
flag=0;
for(j=1;j<=m;j++)
{
if(score[i][j]>=aver2[j])
flag=1;
else
break;
}
if(flag==1)
s+=1;
}
for(i=1;i<=n;i++)
i==1?printf("%0.2f",aver1[i]):printf("% 0.2f",aver1[i]);
printf("\n");
for(i=1;i<=m;i++)
i==1?printf("%0.2f",aver2[i]):printf("% 0.2f",aver2[i]);
printf("\n%d\n\n",s);
}
}
错哪了?各位有空的看下,谢谢! 展开
# define M 5
# define N 50
void main()
{
int n,m,i,j,flag,s;
double aver1[N+1],aver2[M+1],score[N+1][M+1];
while(scanf("%d%d",&n,&m)!=EOF)
{
s=0;
for(i=1;i<=n;i++)
score[i][0]=0;
for(i=1;i<=m;i++)
score[0][i]=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
scanf("%lf",&score[i][j]);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
score[i][0]+=score[i][j];
aver1[i]=score[i][0]/m;
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
score[0][i]+=score[j][i];
aver2[i]=score[0][i]/n;
}
for(i=1;i<=n;i++)
{
flag=0;
for(j=1;j<=m;j++)
{
if(score[i][j]>=aver2[j])
flag=1;
else
break;
}
if(flag==1)
s+=1;
}
for(i=1;i<=n;i++)
i==1?printf("%0.2f",aver1[i]):printf("% 0.2f",aver1[i]);
printf("\n");
for(i=1;i<=m;i++)
i==1?printf("%0.2f",aver2[i]):printf("% 0.2f",aver2[i]);
printf("\n%d\n\n",s);
}
}
错哪了?各位有空的看下,谢谢! 展开
3个回答
展开全部
你这种做法是错的。
flag=0;
for(j=1;j<=m;j++)
{
if(score[i][j]>=aver2[j])
flag=1;
else
break;
}
if(flag==1)
s+=1;
这段错误的。不是浮点问题,目前的oj浮点能直接比较相等的。
问题就是你这种判断方法是只要一开始的第一个是大于平均值,之后不管是否大于平均值都认为是大于平均值的。
---------------------------
if(score[i][j]>=aver2[j])
flag=1;
else{
flag=0;//修改~~~
break;
}
flag=0;
for(j=1;j<=m;j++)
{
if(score[i][j]>=aver2[j])
flag=1;
else
break;
}
if(flag==1)
s+=1;
这段错误的。不是浮点问题,目前的oj浮点能直接比较相等的。
问题就是你这种判断方法是只要一开始的第一个是大于平均值,之后不管是否大于平均值都认为是大于平均值的。
---------------------------
if(score[i][j]>=aver2[j])
flag=1;
else{
flag=0;//修改~~~
break;
}
展开全部
for(i=1;i<=n;i++)
{
flag=0;
for(j=1;j<=m;j++)
{
if(score[i][j]>=aver2[j])
flag=1;
else
break;
}
if(flag==1)
s+=1;
}
//...
for(i=1; i<=n; i++)
{
flag=0;
for(j=1; j<=m; j++)
{
if((int)(score[i][j]*100)>=(int)(aver2[j]*100))//对于浮点数的等于不能直接比较
flag=1;
else
break;
}
if(j>m)//每个成绩都不小于平均成绩
s+=1;
}
{
flag=0;
for(j=1;j<=m;j++)
{
if(score[i][j]>=aver2[j])
flag=1;
else
break;
}
if(flag==1)
s+=1;
}
//...
for(i=1; i<=n; i++)
{
flag=0;
for(j=1; j<=m; j++)
{
if((int)(score[i][j]*100)>=(int)(aver2[j]*100))//对于浮点数的等于不能直接比较
flag=1;
else
break;
}
if(j>m)//每个成绩都不小于平均成绩
s+=1;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int main()
{
int m,n,a[100][100],i,j,num=0;
double avestu,sum=0.00;
double avecou;
double barry[100];
while(scanf("%d%d",&m,&n)!=EOF)
{
num=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
{
sum=0.0;
for(j=0;j<n;j++)
sum=sum+a[i][j];
avestu=sum/n;
if(i==m-1) printf("%.2lf",avestu);
else printf("%.2lf ",avestu);
}
printf("\n");
for(j=0;j<n;j++)
{
sum=0.0;
for(i=0;i<m;i++)
sum=sum+a[i][j];
avecou=sum/m;
barry[j]=avecou;
if(j==n-1) printf("%.2lf",avecou);
else printf("%.2lf ",avecou);
}
printf("\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
if(a[i][j]<barry[j]) break;
if(j==n) num=num+1;
}
printf("%d\n\n",num);
}
return 0;
}
你的m和n与题目中的相反
int main()
{
int m,n,a[100][100],i,j,num=0;
double avestu,sum=0.00;
double avecou;
double barry[100];
while(scanf("%d%d",&m,&n)!=EOF)
{
num=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
{
sum=0.0;
for(j=0;j<n;j++)
sum=sum+a[i][j];
avestu=sum/n;
if(i==m-1) printf("%.2lf",avestu);
else printf("%.2lf ",avestu);
}
printf("\n");
for(j=0;j<n;j++)
{
sum=0.0;
for(i=0;i<m;i++)
sum=sum+a[i][j];
avecou=sum/m;
barry[j]=avecou;
if(j==n-1) printf("%.2lf",avecou);
else printf("%.2lf ",avecou);
}
printf("\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
if(a[i][j]<barry[j]) break;
if(j==n) num=num+1;
}
printf("%d\n\n",num);
}
return 0;
}
你的m和n与题目中的相反
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询