C语言求助,运行结果正确,但OJ上通不过,说是答案错误。

输入第一行为整数T(1<T<5)后边是T行正整数,个数不确定,以-1结束。输出为T行,每行对应输入中的T行测试数据,依次输出数据中的最小值、最大值以及平均值。三个数之间以一个空格分隔,平均值要求保留两位小数。测试数据保证求和结果可以用int型存储。我的代码如下:#include <stdio.h>int main(){ int T; scanf("%d",&T); int i,j,s[5][100]; for(i=0;i<T;i++) { for(j=0;j>=0;j++) { scanf("%d",&s[i][j]); if(s[i][j]==-1) break; } } int min,max; float sum,avg; for(i=0;i<T;i++) { min=s[i][0]; max=s[i][0]; sum=s[i][0]; for(j=1;s[i][j]!=-1;j++) { if(s[i][j]<min) min=s[i][j]; if(s[i][j]>max) max=s[i][j]; sum=sum+s[i][j]; } avg=sum/j; printf("%d %d %.2f\n",min,max,avg); } return 0;}

构思有问题——题目要求每行的数据个数不限,以-1结束,而你提供的代码每行只能输入最多100个数。就这一点就可以Don't pass!给你提供一个作参考——

#include "stdio.h"
struct rec{//记录max、min和ave的结构体,也可以不用结构体而用二维数组实现
int max,min;
double ave;
};
int main(int argc,char *argv[]){
int T,n,s,t,x;
struct rec R[5];
printf("Please enter T(int 0<T<6)...\nT=");
if(scanf("%d",&T)!=1 || T<1 || T>5){//输入T且控制范围
printf("Input error, exit...\n");
return 0;
}
for(x=T;T--;){//用x记录T,后面要用到
for(s=n=0;scanf("%d",&t) && t!=-1;n++){
if(s){
if(R[T].max<t)
R[T].max=t;//总记录最大值
if(R[T].min>t)
R[T].min=t;//总记录最小值

}
else
R[T].max=R[T].min=t;
s+=t;
}
R[T].ave=s/(n+0.0);//求一行平均值
}
printf("\n");
while(x--)
printf("%d %d %.2f\n",R[x].min,R[x].max,R[x].ave);
return 0;
}

运行样例:

追问

谢谢您的回答,但是我可以肯定是的100那儿没有问题,因为以前的地方,我都是这么操作的,所以还请帮忙看看还有哪儿的问题。

追答

    for(j=0;j>=0;j++)这一句什么时候结束?万一输入100个数了还没有输入-1不就乱套了?

    avg=sum/j;这一句求不出平均值来,因为sum/j是取整除,得不到浮点平均值。应该写成avg=sum/(j+0.0);或者avg=(sum+0.0)/j;或者float(sum)/j;或(float)sum/j;等。

若你说的限制100长不算错,那经上面改进就可以了……

温馨提示:答案为网友推荐,仅供参考
相似回答