期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入 n 个学生成绩,输出每组排在前五高的成绩。
数据范围: 5 \le n \le 50 \5≤n≤50 ,成绩采取百分制并不会出现负数
输入描述:
两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。
输出描述:
一行,输出成绩最高的前五个,用空格分隔。
解决方法一、
#include<stdio.h>
int main()
{
int n=0;
int a[50]={0};
scanf("%d",&n);
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//排序 冒泡法:两两相邻元素比较,并且交换
//9 8 7 6 5 4 3 2 1 0变成 8 9 7 6 5 4 3 2 1 0
//……变成8 7 6 5 4 3 2 1 0 9
//n个元素有n-1躺冒泡排序
for(i=0;i<n-1;i++)
{
//一躺冒泡排序进行n-1-i对元素的比较
int j=0;
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1]) //升序:如果前面大于后面 则交换
{
int t;
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
//取排完序的最后5个元素
for(i=n-1;i>=n-5;i--) //n个元素 则最后一个元素下标为n-1
{
printf("%d ",a[i]);
}
return 0;
}
方法二、
#include<stdio.h>
#include<stdlib.h> //使用qsort函数
int cmp(const void *a, const void *b)
{
return *(int*)a - *(int*)b; //由小到大排序
//return *(int *)b - *(int *)a; 由大到小排序
}
int main()
{
int n=0;
int a[50]={0};
scanf("%d",&n);
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
qsort(a,n,4,cmp); //数组,元素个数n,元素字节4
for(i=n-1;i>=n-5;i--)
{
printf("%d ",a[i]);
}
return 0;
}
————————————————
版权声明:本文为CSDN博主「fangyuxuan123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fangyuxuan123/article/details/126634584