问题描述
从键盘输入n代表有n组数据,在输入第一组数据的个数K和这K个数据的值,随后按同样的方法从键盘输入数据知道第n组,编写函数输出每组数据中低于平均数的个数和具体值
标准输入:
2
5
1 3 5 7 12
4
1 2 3 4
标准输出:
3
1 3 5
2
1 2
解题思路
a二维数组保存n组数据,sum求每组的累计和
cnt保存每组的数据个数,ans保存每组小于平均数的个数,avg保存每组平均值先用两层for 保存每组的所有值、平均值以及每组的数据个数(k)
再用两层for 求每组的平均值,这里的平均值使用的double类型
最后两层for 输出每组小于其对应平均值的个数,一次遍历小于该值就输出
记得换行位置别弄错~~~
解题代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int i,j,n,k,a[100][100],sum[100]={0},cnt[100]={0},ans[100]={0};
double avg[100];
//a二维数组保存n组数据,sum求每组的累计和
//cnt保存每组的数据个数,ans保存每组小于平均数的个数,avg保存每组平均值
scanf("%d",&n);
for(i = 0; i < n; i++){
scanf("%d",&k);
cnt[i] = k;
for(j = 0; j < k; j++){ //输入n组数据保存对应的值
scanf("%d",&a[i][j]);
sum[i] += a[i][j];
}
avg[i] = sum[i] * 1.0 / cnt[i];
}
for(i = 0; i < n; i++)
for(j = 0; j < cnt[i]; j++) //求每组数据低于平均值的个数
if(a[i][j] < avg[i]) ans[i]++;
//输出结果
for(i = 0; i < n; i++){
printf("%d\n",ans[i]);
for(j = 0; j < cnt[i]; j++){
if(a[i][j] < avg[i])
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}