|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述
某天小鑫忽然得到了许多的数字,他很好学,老师给他布置了一个任务,求出这些数字中,小于他们平均数、等于他们平均数、大于他们平均数的数字的数量是多少。(对于出现的平均数,保证都是整数,不会出现浮点数)
输入描述
多组输入。
对于每次的输入,第一行一个整数N
(1≤N≤10
),代表数字的个数。
接下来的一行,输入N
个整数M
(0≤M≤100
)。
输出描述
输出包含三个数,第一个跟第二个数后面是空格,最后一个数后面是换行。
第一个数是这些数字中小于他们平均数的数字的个数,第二个数为等于他们平均数的数字的个数,第三个数为大于他们平均数的数字的个数。
- #include<stdio.h>
- int main()
- {
- int a[15],n,i,sum=1,av;
- while(scanf("%d",&n)!=EOF)
- {
- 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);
- }
- }
复制代码
问题在于:当输入多组数据时,每次循环结束后没有将 sum 归零,导致每次计算平均数时使用的 sum 值是上一次循环的结果,从而得到错误的答案。
以下是修改后的代码:
- #include<stdio.h>
- int main() {
- int a[15], 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 归零,以确保计算平均值时使用的是当前循环的数字总和。这样就可以正确地输出小于、等于、大于平均值的数字数量了。
球一个最佳答案谢谢啦!这对我非常重要!  
|
|