代码有什么问题啊
题目描述某天小鑫忽然得到了许多的数字,他很好学,老师给他布置了一个任务,求出这些数字中,小于他们平均数、等于他们平均数、大于他们平均数的数字的数量是多少。(对于出现的平均数,保证都是整数,不会出现浮点数)
输入描述
多组输入。
对于每次的输入,第一行一个整数N
(1≤N≤10
),代表数字的个数。
接下来的一行,输入N
个整数M
(0≤M≤100
)。
输出描述
输出包含三个数,第一个跟第二个数后面是空格,最后一个数后面是换行。
第一个数是这些数字中小于他们平均数的数字的个数,第二个数为等于他们平均数的数字的个数,第三个数为大于他们平均数的数字的个数。
#include<stdio.h>
int main()
{
int a,n,i,sum=1,av;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a);
sum+=a;
}
av=sum/n;
int sma=0,sav=0,smi=0;
for(i=0;i<n;i++)
{
if(a==av) sav++;
if(a>av) sma++;
if(a<av) smi++;
}
printf("%d %d %d\n",smi,sav,sma);
}
} 代码有一个小问题,sum初始值应该为0而不是1。否则会导致求出的平均数有误差。另外,可以考虑加上一些注释,提高代码的可读性。修改后的代码如下:
#include<stdio.h>
int main()
{
int a, n, i, sum = 0, av;
while(scanf("%d", &n) != EOF)
{
sum = 0; // 每次循环前需要将sum清零
for(i = 0; i < n; i++)
{
scanf("%d", &a[ i]);
sum += a[ i];
}
av = sum / n;
int sma = 0, sav = 0, smi = 0;
for(i = 0; i < n; i++)
{
if(a[ i] == av) sav++;
if(a[ i] > av) sma++;
if(a[ i] < av) smi++;
}
printf("%d %d %d\n", smi, sav, sma);
}
return 0;
}
问题在于:当输入多组数据时,每次循环结束后没有将 sum 归零,导致每次计算平均数时使用的 sum 值是上一次循环的结果,从而得到错误的答案。
以下是修改后的代码:
#include<stdio.h>
int main() {
int a, n, i, sum = 0, av;
while(scanf("%d", &n) != EOF) {
sum = 0; // 每次循环前将 sum 归零
for(i = 0; i < n; i++) {
scanf("%d", &a);
sum += a;
}
av = sum / n;
int sma = 0, sav = 0, smi = 0;
for(i = 0; i < n; i++) {
if(a == av) sav++;
if(a > av) sma++;
if(a < av) smi++;
}
printf("%d %d %d\n", smi, sav, sma);
}
return 0;
}
我们在每次循环开始之前将 sum 归零,以确保计算平均值时使用的是当前循环的数字总和。这样就可以正确地输出小于、等于、大于平均值的数字数量了。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]