HDOJ 2023平均成績を求める

6257 ワード

平均成績を求める.
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 58415    Accepted Submission(s): 13985
Problem Description
1つのクラスにn(n<=50)人の学生がいると仮定し、1人当たりm(m<=5)科目を受験し、各学生の平均成績と各科目の平均成績を求め、各科目の成績が平均成績以上の学生数を出力する.
 
 
Input
入力データには複数のテストインスタンスがあり、各テストインスタンスの最初の行には、学生数とカリキュラム数を表す2つの整数nとmが含まれます.次にn行のデータで、各行にm個の整数(すなわち、試験点数)が含まれる.
 
 
Output
各テストインスタンスについて、3行のデータを出力し、1行目はn個のデータを含み、n個の学生の平均成績を表し、結果は2桁の小数を保持する.2行目はm個のデータを含み、m科目の平均成績を表し、結果は2桁の小数を保持する.3行目は整数で、このクラスの各科の成績が平均成績に等しい学生の数より大きいことを示しています.
各テストインスタンスの後ろに空の行があります.
 
 
Sample Input
2 2 5 10 10 20
 
 
Sample Output
7.50 15.00 7.50 15.00 1
 
 
Author
lcy
 問題解決レポート:
1つの2次元配列で各学生の各科の成績を保存します.横座標は学生を表し、縦座標は各学科を表す.横方向の遍歴データは各学生の平均点を得,縦方向の遍歴は各学科の平均点を得た.1次元配列で各学生の各学科の平均点を保存し、学生の成績が平均点より大きい人数を求めるのに便利です.
出力フォーマットに注意!
#include<stdio.h>
int buf[55][8];
double sub_average[5];
int main()
{
    int n, m;
    int i, j;
    int count;
    double sum = 0;

    while(scanf("%d%d", &n, &m) == 2)
    {
        count = 0;
        for(i = 0; i < n; i++)
        for(j = 0; j < m; j++)
            scanf("%d", &buf[i][j]);
        for(i = 0; i < n; i++)
        {
            sum = 0;
            for(j = 0; j < m; j++)
                sum += buf[i][j];
            if(i)
                printf(" ");
            printf("%.2lf", sum /(double)m);
        }
        printf("
"); for(j = 0; j < m; j++) { sum = 0; for(i = 0; i < n; i++) sum += buf[i][j]; sub_average[j] = sum /(double)n; if(j) printf(" "); printf("%.2lf", sub_average[j]); } printf("
"); for(i = 0; i < n; i++) { for(j = 0; j < m; j++) if(buf[i][j] < sub_average[j]) break; if(j == m) count++; } printf("%d

", count); } return 0; }