其他分享
首页 > 其他分享> > 第四次机考(2019)E. 教学质量评估

第四次机考(2019)E. 教学质量评估

作者:互联网

这里也体现了动态二维数组的好处,每个线性表(一维数组)是独立的,长度可以不一样,所以把这样的线性表的头部拼起来,其尾部可以是犬牙差互的,即可以不是个方阵,可以减少冗余的出现。
思路:读取成绩——计算平均——排序——输出

#include <stdio.h>
#include <stdlib.h>
int main()
{	
	int i,j,tmp,n,m;scanf("%d",&n);

	int **mainPtr=(int**)malloc(sizeof(int*)*n);
	for(i=0;i<n;i++)
	{	
		scanf("%d",&m);
		mainPtr[i]=(int*)malloc(sizeof(int)*(m+1));
		mainPtr[i][0]=m;//0号位保存人数,从1号位开始读取成绩信息
		for(j=1;j<m+1;j++)
			scanf("%d",&mainPtr[i][j]);
	}

	int avg[n],order[n];
	
	for(i=0;i<n;i++) order[i]=i;
	for(i=0;i<n;i++)
	{
		tmp=0;
		for(j=1;j<mainPtr[i][0]+1;j++)
			tmp+=mainPtr[i][j];
		avg[i]=tmp/mainPtr[i][0];
	}
	//将老师的平均分计算出来,保存到avg数组里
	for(i=1;i<n;i++)
		for(j=0;j<n-i;j++)//冒泡排序
			if(avg[order[j]]>avg[order[j+1]])
			{
				tmp=order[j];
				order[j]=order[j+1];
				order[j+1]=tmp;
			}
			
	for(i=0;i<n;i++)
	{	
		m=mainPtr[order[i]][0];//再将人数取出来
		for(j=1;j<m+1;j++)
			printf("%d%c",mainPtr[order[i]][j],j==m?'\n':' ');
		//打印成绩,是最后一个元素就加回车,否则加空格
	}

	for(i=0;i<n;i++) free(mainPtr[i]);
	free(mainPtr);
	return 0;
}

为了全面贯彻落实习近平总书记2018年5月2日在北京大学师生座谈会上重要讲话精神,坚持“以本为本”,推进“四个回归”,加快建设高水平本科教育、全面提高人才培养能力,造就堪当民族复兴大任的时代新人,B大学制定了新的本科教学质量的评估标准来评价老师的教学质量。标准就是每个老师所教的学生成绩的平均值。现在就请你写一段程序计算一下这个平均值。

输入:
第一行为一个整数n(0<n),代表有n个老师,后边n行每一行代表一个老师的数据,格式为若干个正整数(至少有2个),第一个整数为m(0<m<1000),代表该老师所教的学生数量,后边为m个正整数代表每个学生的成绩。

输出:
共n行,每行为一个老师的数据(只包含学生的成绩不包含前边那个学生的个数,这些成绩按输入顺序输出)。老师信息的输出顺序为按每个老师的学生的平均成绩由低到高输出,也就是说先输出学生平均成绩低的老师的数据,后输出学生平均成绩高的老师的数据(计算平均成绩时用C语言的整数除法即可,也就是说所有计算过程中不需要用到浮点数)。测试数据保证没有平均分相同的老师,且运算中所有整数可以用 int 存储。

提示:
由于n可能很大,对于每个老师m也可能不同,所以建议先建一个长度为n的指针数组(内存动态申请)用于保存n个老师信息的数组的首地址,然后根据每个老师的学生数量的不同动态的为每个老师的数据申请空间,将其学生的信息保存其中,最后利用指针数组对老师的数据进行排序和输出。

输入样例

5
7 58 55 88 74 95 98 86
3 90 65 78
2 70 58
5 17 62 69 83 32
9 51 66 42 98 13 85 87 97 60
输出样例

17 62 69 83 32
70 58
51 66 42 98 13 85 87 97 60
90 65 78
58 55 88 74 95 98 86

标签:输出,58,教学质量,int,老师,机考,2019,成绩,order
来源: https://blog.csdn.net/weixin_43873801/article/details/86550823