|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述
某班级期末考试有三门课程;语文、数学和英语。班级共有n名学生。
请统计并输出各科分数分档和总平均分档表。
分档以10分为一档,0分不统计。及(0-10]、(10-20]、...、(90-100]共十档。
输入
首先是班级人数n(n<100)
然后n行,每行3个整数,表示语文、数学和英语的成绩。(没有0分)
输出
依次输出语文、数学、英语和总平均分档表。
每行一个分档表,依次是(0-10]、(10-20]、...、(90-100]的人数
样例输入
6
89 73 32
30 35 89
18 69 57
55 44 82
2 16 75
29 31 23
样例输出
1,1,2,0,0,1,0,0,1,0
0,1,0,2,1,0,1,1,0,0
0,0,1,1,0,1,0,1,2,0
0,0,1,1,1,1,2,0,0,0
#include <stdio.h>
int main()
{
int n,i,j,sum1,sum2,sum3,sum4,jun1,jun2,jun3,jun4,yu,shu,ying;
sum4=0;
sun1=0;
sum2=0;
sum3=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d%d\n",&yu,&shu,&ying);
sum1=sum1+yu;
sum2=sum2+shu;
sum3=sum3+ying;
sum4=sum1+sum2+sum3+sum4;
jun4=sum/3;
for(j=0;j<i;j++)
{
我就写到这
本帖最后由 jackz007 于 2020-11-22 13:57 编辑
与样例一模一样的答案来了 #include <stdio.h>
int main(void)
{
int d[50][3] = {0} , e[4][10] = {0} , i , j , k , m , s ;
scanf("%d" , & m) ;
for(i = 0 ; i < m ; i ++) scanf("%d%d%d" , & d[i][0] , & d[i][1] , & d[i][2]) ;
for(i = 0 ; i < m ; i ++) for(j = 0 ; j < 3; j ++) if(d[i][j]) e[j][(d[i][j] - 1) / 10] ++ ;
for(i = 0 ; i < m ; i ++) {
for(j = k = s = 0 ; j < 3 ; j ++) {
if(d[i][j]) {
s += d[i][j] ;
k ++ ;
}
}
e[3][s / k / 10] ++ ;
}
for(i = 0 ; i < 4 ; i ++) {
printf("%d" , e[i][0]) ;
for(j = 1 ; j < 10 ; j ++) printf(",%d" , e[i][j]) ;
printf("\n") ;
}
}
编译、运行实况: D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
6
89 73 32
30 35 89
18 69 57
55 44 82
2 16 75
29 31 23
1,1,2,0,0,1,0,0,1,0
0,1,0,2,1,0,1,1,0,0
0,0,1,1,0,1,0,1,2,0
0,0,1,1,1,1,2,0,0,0
D:\0002.Exercise\C>
但是,这个代码统计的结果是存在问题的,比如,平均 90 分本应该被纳入 (80 , 90] 分数段,却被错误地纳入 (90 , 100] 分数段;如果平均分恰好是 100 分的话将无法纳入统计,因为下标是 10,数组下标已经越界了。本例中,有一个平均成绩 60 分,按规则,显然应该被归入 (50 , 60] 分数段,而在样例中,却被错误地归入 (60 , 70] 分数段,从而导致样例平均分的统计结果出现错误。
所以,真正正确的代码和样例应该是下面这个样子: #include <stdio.h>
int main(void)
{
int d[50][3] = {0} , e[4][10] = {0} , i , j , k , m , s ;
scanf("%d" , & m) ;
for(i = 0 ; i < m ; i ++) scanf("%d%d%d" , & d[i][0] , & d[i][1] , & d[i][2]) ;
for(i = 0 ; i < m ; i ++) for(j = 0 ; j < 3; j ++) if(d[i][j]) e[j][(d[i][j] - 1) / 10] ++ ;
for(i = 0 ; i < m ; i ++) {
for(j = k = s = 0 ; j < 3 ; j ++) {
if(d[i][j]) {
s += d[i][j] ;
k ++ ;
}
}
e[3][(s / k - 1) / 10] ++ ; // 这一行不同
}
for(i = 0 ; i < 4 ; i ++) {
printf("%d" , e[i][0]) ;
for(j = 1 ; j < 10 ; j ++) printf(",%d" , e[i][j]) ;
printf("\n") ;
}
}
编译、运行实况 D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
6
89 73 32
30 35 89
18 69 57
55 44 82
2 16 75
29 31 23
1,1,2,0,0,1,0,0,1,0
0,1,0,2,1,0,1,1,0,0
0,0,1,1,0,1,0,1,2,0
0,0,1,1,1,2,1,0,0,0
D:\0002.Exercise\C>
|
|