灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2118回复:0

ACM1分步实现,打基础,再实现

楼主#
更多 发布于:2012-09-06 12:31


求一个值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[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[j]!=0)
30                 {
31                     n_stu_class_num++;
32                     tmp_sum+=data[j];
33                 }
34
35             }
36
37             totalOfClass+=data[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);
59     }
60
61     for(i=0; i<student_num; i++)
62     {
63         for(j=0; j<class_num; j++)
64             scanf("%d",;data[j]);
65     }
66
67     //print_data(data,student_num,class_num);
68
69     for(i=0; i<class_num; i++)
70     {
71         //pinjun=f_pinjun(data,student_num,i,class_num);
72         //printf("%d ",pinjun);
73         //if(i!=class_num-1)
74         //printf("%s %d\n",class_name,pinjun-deta);
75         //printf("%d\n",deta);
76         printf("%s %d\n",class_name,f_pinjun(data,student_num,i,class_num));
77     }
78     //printf("%s %d",class_name[i-1],pinjun-deta);
79
80     return 0;

81 }
ACM  2 分步实现 打基础 再实现 将对它改进。



喜欢0 评分0
游客

返回顶部