1.OJ 2023 求平均成績http://acm.hdu.edu.cn/showproblem.php?pid=2023
Problem Description
假設(shè)一個班有n(n<=50)個學(xué)生回俐,每人考m(m<=5)門課,求每個學(xué)生的平均成績和每門課的平均成績脯宿,并輸出各科成績均大于等于平均成績的學(xué)生數(shù)量亩进。
Input
輸入數(shù)據(jù)有多個測試實例搀军,每個測試實例的第一行包括兩個整數(shù)n和m,分別表示學(xué)生數(shù)和課程數(shù)勇皇。然后是n行數(shù)據(jù)罩句,每行包括m個整數(shù)(即:考試分?jǐn)?shù))。
Output
對于每個測試實例敛摘,輸出3行數(shù)據(jù)门烂,第一行包含n個數(shù)據(jù),表示n個學(xué)生的平均成績兄淫,結(jié)果保留兩位小數(shù)屯远;第二行包含m個數(shù)據(jù),表示m門課的平均成績捕虽,結(jié)果保留兩位小數(shù)慨丐;第三行是一個整數(shù),表示該班級中各科成績均大于等于平均成績的學(xué)生數(shù)量泄私。
每個測試實例后面跟一個空行房揭。
Sample Input
2 2
5 10
10 20
Sample Output
7.50 15.00
7.50 15.00
1
2.思路:
根據(jù)題目意思,首先定義一個二維數(shù)組來存儲成績晌端,再定義一個一維數(shù)組表示m門課的平均成績方便后面統(tǒng)計各門課均大于等于平均分的學(xué)生捅暴。二維數(shù)組的行代表一個學(xué)生的各科成績,列代表該科所有學(xué)生的成績咧纠,利用該特點蓬痒,計算兩個類型的平均數(shù)。統(tǒng)計各科成績均高于各科平均分的時候惧盹,要注意同一個人不能重復(fù)記錄乳幸,此時用一個新的參數(shù)t來記錄高于平均分的科目數(shù),當(dāng)t與輸入的科目數(shù)相等時钧椰,累計+1粹断,注意重新開始循環(huán)時要重置t=0。
3.源代碼:
#include<stdio.h>
int main()
{
int n,m;
double grade[50][5];
while(scanf ("%d%d",&n,&m)!=EOF)
{
double sum1,sum2,subave[5],stuave;
int i,j,k,count,flag;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
scanf("%lf",&grade[i][j]);
}
}
flag=0;
//計算學(xué)生的平均成績:
for(i=0;i<n;i++){
sum1=0;
for(j=0;j<m;j++){
sum1=sum1+grade[i][j];
}
stuave=sum1/m;
printf("%.2lf",stuave);
if(flag<n-1)printf(" ");
flag++;
}
printf("\n");
flag=0;
//計算各科目的平均成績:
for(i=0;i<m;i++){
sum2=0;
for(j=0;j<n;j++)
sum2=sum2+grade[j][i];
subave[i]=sum2/n;
printf("%.2lf",subave[i]);
if(flag<m-1)printf(" ");
flag++;
}
printf("\n");
for(i=0,k=0;i<n;i++){
int t=0;
for(j=0;j<m;j++){
if(grade[i][j]>=subave[j]) t++;
}
if(t==m) k++;
}
printf("%d\n\n",k);
}
return 0;
}
4.收獲和總結(jié):
在這里踩了一個很深的PE坑嫡霞,很長時間一直調(diào)試一直PE瓶埋。
①首先是要注意輸出時“每個測試實例后面跟一個空行。
②控制輸出兩個數(shù)字間的空格的時候要注意m诊沪、n有不同的含義养筒,要理清他們在該循環(huán)中的作用,稍不注意用反就會報PE端姚。
③用來作判斷的flag的初始化為0要放在循環(huán)前面晕粪,若放在循環(huán)里面,flag會變得沒有意義渐裸,從而PE巫湘。