据说90%的新生希望自己的成绩在班上高于平均水平。请你提供一个事实核查。
输入格式第一行包含一个整数C,测试用例的数量。C数据集如下。每个数据集以整数N开始,N是班级的人数(1 <= N <= 1000)。后面跟着N个整数,用空格或换行符分隔,每个整数表示一个学生的最终成绩(0到100之间的整数)。
输出格式对于每种情况,你都要输出一条线,给出成绩高于平均水平的学生的百分比,四舍五入到小数点后三位。
输入样例5 5 50 50 70 80 100 7 100 95 90 80 70 60 50 3 70 90 80 3 70 90 81 9 100 99 98 97 96 95 94 93 91输出样例
40.000% 57.143% 33.333% 66.667% 55.556%要求
Code Size Limit 16 KB Time Limit 400 ms Memory Limit 64 MB解题思路
本题目要细心
一,定义数据,输入数据n,并通过第一层循环输入a [ j ]就是接下来一行当中数据元素的个数,同时加入一个求和变量,第二层循环进行相加b [ i ],求出一行数据的和sum
二,定义第二个数据元素double cp[ N ]存储每一行的分数线(double) sum/a[ j ];
三,定义一个中间变量temp = 0 ;循环遍历每一个数据元素,将每个元素与分数线cp [ j ]
进行比较,大于分数线上的就temp ++;
四,将每一组循环遍历的temp 与当行个数a [ j ]进行相除,并强制转化那位double 类型存储到最后一个数组double ct[ j ]; 但这里要注意,前面的相处之所以要进行强制转化,是在temp / a[ j ] 相除之后是个整型或者float 型
五,数据输出,当前以上得出的double ct [ j ];得出的数据是小于 1 的比率,输出是要乘以100 并在后面加上 “%” 和%.3lf的要求。
#include#include #define N 1005 int a[N]; int b[N]; double cp[N]; double ct[N]; int main(){ int n; int j; scanf("%d",&n); for(j=0;j scanf("%d",&a[j]); int sum = 0; for(int i=0;i scanf("%d ",&b[i]); sum = sum+b[i]; } cp[j] = (double)sum/a[j]; //printf("%lf",cp[j]); int temp=0; for(int i=0;i if(b[i]>cp[j]) temp++; } //printf("%d",a[j]); ct[j] =(double)temp/a[j]; } for(int i=0;i printf("%.3lf%n",ct[i]*100); } return 0; }



