HDOJ 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
学生和各科成绩我们可以看作是一个矩阵, 把求学生成绩平均值和各科目成绩平均值的问题转化成求矩阵各行各列平均值问题,然后用二维数组去处理,如图
AC代码(c语言)
#include<stdio.h>
void print_arr(double arr[], int n); //打印函数
int count(double arr1[], int arr2[][10], int n, int m); //统计函数
void ave_add_l(double arr1[], int arr2[][10], int n, int m); //求列平均值函数
void ave_add_h(double arr1[], int arr2[][10], int n, int m); //求行平均值函数
void create(int arr[][10], int n, int m); //创建二维数组函数
int main(void)
{
int arr[60][10];
double ave_h[60];
double ave_l[10];
int n, m;
while (scanf("%d %d", &n, &m) != EOF)
{
create(arr, n, m);
ave_add_h(ave_h, arr, m, n);
ave_add_l(ave_l, arr, n, m);
print_arr(ave_h, n);
print_arr(ave_l, m);
printf("%d\n\n", count(ave_l, arr, n, m));
//这里有两个换行
}
return 0;
}
void print_arr(double arr[], int n) //打印函数
{
int i;
printf("%.2f", arr[0]);
for (i = 1; i < n; i++)
printf(" %.2f", arr[i]);
printf("\n");
}
int count(double arr1[], int arr2[][10], int n, int m) //统计函数
{
int count = 0;
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if (arr2[i][j] < arr1[j])
//判断当前学生各科成绩是否都大于平均分
break;
}
if (j >= m) //break语句未执行,当前学生各科成绩都大于平均值所以统计,count++
count++;
}
return count;
}
void ave_add_l(double arr1[], int arr2[][10], int n, int m) //求列平均值函数
{
int i, j;
double sum;
for (j = 0; j < m; j++)
{
sum = 0;
for (i = 0; i < n; i++)
{
sum += arr2[i][j];
}
arr1[j] = (double)sum/ n;
}
}
void ave_add_h(double arr1[], int arr2[][10], int n, int m) //求行平均值函数
{
int i, j;
double sum;
for (j = 0; j < m; j++)
{
sum = 0;
for (i = 0; i < n; i++)
{
sum += arr2[j][i];
}
arr1[j] = (double)sum/ n;
}
}
void create(int arr[][10], int n, int m) //创建二维数组函数
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
}