求一个值delta,让选上了这一门课(未选的
成绩是0)的每个学生的成绩+delta,再计算这门课的平均分,这个平均分恰好等于选了这门课的所有的学生的平均成绩
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 // int count_in=0;
5 // int deta=0;
6
7 // (y1 + y2 + .....y_count_in+(count_in)*detal) / count_in = n1 = sum / count_in
8 // y1 表示本门课程的源成绩,
9 // sum逐个加每个学生(已经选了该门课)所有课程的平均,到下面再除一个count_in就是 所有选这课的学生的 所有成绩 的平均值。
10 // count_in表示选本门课的学生数
11 // n1表示选了本门课的 所有学生 的 所有的成绩 的平均值。
12 // detal即为所求的本门所需的差值。
13 // => detal=(sum-(y1+y2....y_count_in)) / count_in
14 // => detal= (sum - totalOfClass ) / count_in.
15 int f_pinjun( int data[][ 10], int student_num, int row, int class_num)
16 {
17 int count_in= 0;
18 int i,sum= 0,tmp_sum,j,n_stu_class_num,totalOfClass= 0;
19 // deta=0;
20
21 for(i= 0; i<student_num; i++)
22 {
23 if(data[i][row]!= 0)
24 {
25 tmp_sum= 0;
26 n_stu_class_num= 0;
27 for(j= 0;j<class_num;j++) // 这个地方的重复的太多。,应当是预先保存每一个学生的平均值,然后调用,这样可以避免重复。
28 {
29 if(data[i][j]!= 0)
30 {
31 n_stu_class_num++;
32 tmp_sum+=data[i][j];
33 }
34
35 }
36
37 totalOfClass+=data[i][row];
38 tmp_sum/=n_stu_class_num;
39 count_in++;
40 sum+=tmp_sum; // sum逐个加每个学生(已经选了该门课)所有课程的平均,到下面再除一个count_in就是 所有选这课的学生的 所有成绩 的平均值。
41 }
42 }
43 // deta=totalOfClass/count_in;
44 // return sum/count_in;
45 return (sum-totalOfClass)/count_in;
46 }
47
48 int main()
49 {
50 char class_name[ 10][ 15];
51 int student_num,class_num,i,data[ 20][ 10],j;
52 // int pinjun[10]= {0,0};
53 scanf( " %d %d ",&student_num,&class_num);
54 // printf("%d %d\n",student_num,class_num);
55
56 for(i= 0; i<class_num; i++)
57 {
58 scanf( " %s ",class_name[i]);
59 }
60
61 for(i= 0; i<student_num; i++)
62 {
63 for(j= 0; j<class_num; j++)
64 scanf( " %d ",&data[i][j]);
65 }
66
67 // print_data(data,student_num,class_num);
68
69 for(i= 0; i<class_num; i++)
70 {
71 // pinjun[i]=f_pinjun(data,student_num,i,class_num);
72 // printf("%d ",pinjun[i]);
73 // if(i!=class_num-1)
74 // printf("%s %d\n",class_name[i],pinjun[i]-deta);
75 // printf("%d\n",deta);
76 printf( " %s %d\n ",class_name[i],f_pinjun(data,student_num,i,class_num));
77 }
78 // printf("%s %d",class_name[i-1],pinjun[i]-deta);
79
80 return 0;
2 #include <stdlib.h>
3
4 // int count_in=0;
5 // int deta=0;
6
7 // (y1 + y2 + .....y_count_in+(count_in)*detal) / count_in = n1 = sum / count_in
8 // y1 表示本门课程的源成绩,
9 // sum逐个加每个学生(已经选了该门课)所有课程的平均,到下面再除一个count_in就是 所有选这课的学生的 所有成绩 的平均值。
10 // count_in表示选本门课的学生数
11 // n1表示选了本门课的 所有学生 的 所有的成绩 的平均值。
12 // detal即为所求的本门所需的差值。
13 // => detal=(sum-(y1+y2....y_count_in)) / count_in
14 // => detal= (sum - totalOfClass ) / count_in.
15 int f_pinjun( int data[][ 10], int student_num, int row, int class_num)
16 {
17 int count_in= 0;
18 int i,sum= 0,tmp_sum,j,n_stu_class_num,totalOfClass= 0;
19 // deta=0;
20
21 for(i= 0; i<student_num; i++)
22 {
23 if(data[i][row]!= 0)
24 {
25 tmp_sum= 0;
26 n_stu_class_num= 0;
27 for(j= 0;j<class_num;j++) // 这个地方的重复的太多。,应当是预先保存每一个学生的平均值,然后调用,这样可以避免重复。
28 {
29 if(data[i][j]!= 0)
30 {
31 n_stu_class_num++;
32 tmp_sum+=data[i][j];
33 }
34
35 }
36
37 totalOfClass+=data[i][row];
38 tmp_sum/=n_stu_class_num;
39 count_in++;
40 sum+=tmp_sum; // sum逐个加每个学生(已经选了该门课)所有课程的平均,到下面再除一个count_in就是 所有选这课的学生的 所有成绩 的平均值。
41 }
42 }
43 // deta=totalOfClass/count_in;
44 // return sum/count_in;
45 return (sum-totalOfClass)/count_in;
46 }
47
48 int main()
49 {
50 char class_name[ 10][ 15];
51 int student_num,class_num,i,data[ 20][ 10],j;
52 // int pinjun[10]= {0,0};
53 scanf( " %d %d ",&student_num,&class_num);
54 // printf("%d %d\n",student_num,class_num);
55
56 for(i= 0; i<class_num; i++)
57 {
58 scanf( " %s ",class_name[i]);
59 }
60
61 for(i= 0; i<student_num; i++)
62 {
63 for(j= 0; j<class_num; j++)
64 scanf( " %d ",&data[i][j]);
65 }
66
67 // print_data(data,student_num,class_num);
68
69 for(i= 0; i<class_num; i++)
70 {
71 // pinjun[i]=f_pinjun(data,student_num,i,class_num);
72 // printf("%d ",pinjun[i]);
73 // if(i!=class_num-1)
74 // printf("%s %d\n",class_name[i],pinjun[i]-deta);
75 // printf("%d\n",deta);
76 printf( " %s %d\n ",class_name[i],f_pinjun(data,student_num,i,class_num));
77 }
78 // printf("%s %d",class_name[i-1],pinjun[i]-deta);
79
80 return 0;
81 }
ACM 2 分步实现 打基础 再实现 将对它改进。