C语言:争夺前五名

描述

期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入 n 个学生成绩,输出每组排在前五高的成绩。

数据范围: 5 \le n \le 50 \5≤n≤50 ,成绩采取百分制并不会出现负数

输入描述:

两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。

输出描述:

一行,输出成绩最高的前五个,用空格分隔。

示例1

输入:

6
99 45 78 67 72 88

输出:

99 88 78 72 67

示例2

输入:

5
10 20 30 40 50
输出:
50 40 30 20 10
#include
//描述
//期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入 n 个学生成绩,输出每组排在前五高的成绩。
//
//数据范围: 5 \le n \le 50 \5≤n≤50  ,成绩采取百分制并不会出现负数
//输入描述:两行,第一行输入一个整数,表示n个学生( >= 5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。
//输出描述:一行,输出成绩最高的前五个,用空格分隔。
//
//示例1
//输入:6
//	  99 45 78 67 72 88
//
//输出:99 88 78 72 67
//示例2
//输入:5
//	  10 20 30 40 50
//输出:50 40 30 20 10
int main()
{
	// -输入
	int arr[40] = { 0 };    // -题目要求不超过40个数字
	int size = sizeof(arr) / sizeof(arr[0]);
	int n = 0;
	scanf("%d", &n);  // -需要读取成绩的数量
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d",&arr[i]);
	}
	// -数组中已经排序好了输入的成绩数量
	// -我们进行排序   -   降序列
	for (i = 0; i < size -1; i++)
	{
		int j = 0;
		for (j = 0; j < size - 1 - i; j++)
		{
			if (arr[j] < arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	// -冒泡排序完成后,我们打印最大的前5个数字
	// -因为我们是降序 - 那么arr[0] arr[1] arr[2] arr[3] arr[4] ....以此变小。
	for (i = 0; i < 5; i++)
	{
		printf("%d ",arr[i]);
	}

	return 0;
}

代码展示:

C语言:争夺前五名_第1张图片

测试结果:

C语言:争夺前五名_第2张图片

牛客测试:

C语言:争夺前五名_第3张图片

还有一种方式是利用函数库来进行排序(这样就不需要自己写排序算法了)

代码参考:

// - 使用函数库进行排序
int cmp_int(const void* e1, const void* e2)
{
	return *(int*)e2 - *(int*)e1;
}


int main()
{
	// -输入
	int arr[40] = { 0 };    // -题目要求不超过40个数字
	int size = sizeof(arr) / sizeof(arr[0]);
	int n = 0;
	scanf("%d", &n);  // -需要读取成绩的数量
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	
	//使用库函数排序
	qsort(arr, n, 4, cmp_int);
	// -排序完成后,我们打印最大的前5个数字
	// -因为我们是降序 - 那么arr[0] arr[1] arr[2] arr[3] arr[4] ....以此变小。
	for (i = 0; i < 5; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

我还在发布一篇博客,来针对qsort()函数库进行解析!!!!

你可能感兴趣的:(牛客刷题,成长日记,c语言,算法,开发语言)