題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2023
求平均成績
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
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 int main() 6 { 7 double m,n; 8 while(cin >> n >> m)//n個學生,m個科目 9 { 10 double fenshu[51][6] = {0},fen[51] = {0};//fenshu二維陣列記錄每個學生的各科分數,fen一維陣列記錄某一學生的總分 11 for(int i = 0;i < n;i++) 12 { 13 for(int j = 0;j < m;j++) 14 { 15 cin >> fenshu[i][j];//回圈讀入n*m個成績資料 16 fen[i] += fenshu[i][j];//對每個學生的成績進行累加,并且記錄在一維陣列fen中 17 } 18 } 19 //輸出第一行 20 for(int i = 0;i < n;i++) //注意控制輸出格式,求出每個學生的平均成績 21 { 22 if(i == n - 1) 23 printf("%.2lf",fen[i] / m); 24 else 25 printf("%.2lf ",fen[i] / m); 26 } 27 cout << endl; 28 //輸出第二行 29 double ave1[6] = {0},ave2[6] = {0};//ave1陣列記錄各科的總分,ave2陣列記錄各科的平均分,注意輸出時的格式 30 for(int j = 0;j < m;j++)//外層回圈為j 相當于對某一列求總和 31 { 32 for(int i = 0;i < n;i++)//內層回圈為i//首先對各科的分數累加 33 ave1[j] += fenshu[i][j]; 34 ave2[j] = ave1[j] / n;//取平均 35 if(j == m - 1) 36 printf("%.2lf",ave2[j]); 37 else 38 printf("%.2lf ",ave2[j]); 39 } 40 cout << endl; 41 //計算有幾個學生的各科成績都大于平均成績的 42 int temp,count = 0; 43 for(int i = 0;i < n;i++)//依次遍歷 44 { 45 temp = 0; 46 for(int j = 0;j < m;j++) 47 if(fenshu[i][j] >= ave2[j])//依題意,如果學生的某一學科的成績會大于等于這個學科的平均成績,那么臨時變數temp加一 48 temp++; 49 if(temp == m)//說明如果學生的m個學科的成績都大于各個學科的平均成績,則符合條件,計數器加一 50 count++; 51 } 52 cout << count << endl << endl;//注意輸出格式 53 } 54 return 0; 55 }
這實際上是一道水題,在我們學校上的測驗平臺上是 萌新題,我做了2-3個小時,我哭了/(ㄒoㄒ)/~~
思路是這樣的,可將輸入學生的成績看成一個矩陣,最后只需對矩陣的行和列進行處理與判斷就好了,太水了我/(ㄒoㄒ)/~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/89854.html
標籤:C++
