1. 程式人生 > >HDU2023 求平均成績【入門】

HDU2023 求平均成績【入門】

求平均成績

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;
}