HDU2023 求平均成績【入門】
阿新 • • 發佈:2019-01-09
求平均成績
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 135296 Accepted Submission(s): 30827
Problem Description 假設一個班有n(n<=50)個學生,每人考m(m<=5)門課,求每個學生的平均成績和每門課的平均成績,並輸出各科成績均大於等於平均成績的學生數量。
Input 輸入資料有多個測試例項,每個測試例項的第一行包括兩個整數n和m,分別表示學生數和課程數。然後是n行資料,每行包括m個整數(即:考試分數)。
Output 對於每個測試例項,輸出3行資料,第一行包含n個數據,表示n個學生的平均成績,結果保留兩位小數;第二行包含m個數據,表示m門課的平均成績,結果保留兩位小數;第三行是一個整數,表示該班級中各科成績均大於等於平均成績的學生數量。
每個測試例項後面跟一個空行。
Sample Input 2 2 5 10 10 20
Sample Output 7.50 15.00 7.50 15.00 1
Author lcy
Source
問題簡述 :(略)
問題分析:這個問題的關鍵是如何用陣列儲存資料。
程式說明:
ACM題通常是輸入多組資料,所以需要注意迴圈控制!
輸出需要注意輸出格式。
EOF的值是-1,加上C語言的整數是補碼錶示,則作為整數其每一個二進位制位均為1。~是按位非運算子,~EOF值為0。
浮點數使用型別double可以保證資料精度不丟失。
計算機語言程式中是沒有實數概念的(實數是數學的概念),只有浮點數,通常用浮點數表示實數。
寫程式的關鍵是邏輯清晰。
AC的C語言程式如下:
/* HDU2023 求平均成績 */ #include <stdio.h> #define N 50 #define M 5 double score[N][M], rowsum[N], colaverage[M]; int main(void) { int n, m, i, j; while(~scanf("%d%d", &n, &m)) { /* 初始化學生成績和,各門成績和 */ for(i=0; i<n; i++) rowsum[i] = 0; for(i=0; i<m; i++) colaverage[i] = 0; /* 輸入資料並求和 */ for(i=0; i<n; i++) { for(j=0; j<m; j++) { scanf("%lf", &score[i][j]); /* 求和 */ rowsum[i] += score[i][j]; colaverage[j] += score[i][j]; } } /* 輸出n個學生的平均成績 */ for(i=0; i<n; i++) { if(i != 0) printf(" "); printf("%.2lf", rowsum[i] / m); } printf("\n"); /* 輸出各門課的平均成績 */ for(i=0; i<m; i++) { colaverage[i] /= n; if(i != 0) printf(" "); printf("%.2lf", colaverage[i]); } printf("\n"); /* 統計各科成績均大於平均成績的學生數量 */ int count = 0, mc; for(i=0; i<n; i++) { mc = 0; for(j=0; j<m; j++) { if(score[i][j] < colaverage[j]) break; else mc++; } if(mc == m) count++; } /* 輸出各科成績均大於平均成績的學生數量 */ printf("%d\n\n", count); } return 0; }