期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入 n 个学生成绩,输出每组排在前五高的成绩。
数据范围:
,成绩采取百分制并不会出现负数
两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。
一行,输出成绩最高的前五个,用空格分隔。
6 99 45 78 67 72 88
99 88 78 72 67
5 10 20 30 40 50
50 40 30 20 10
#include <stdio.h>
#include<stdlib.h>
int compare(const void* a,const void* b)
{
return *(int*)b-*(int*)a;
}
int main() {
int n=0;
scanf("%d\n",&n);
int arr[50]={0};
for(int i=0;i<50;i++)
{
scanf("%d",&arr[i]);
qsort(arr,n,sizeof(int),compare);
}
for(int j=0;j<5;j++)
{
printf("%d ",arr[j]);
}
return 0;
} #include<stdio.h>
void My_scanf(int arr[],int n) //输入成绩
{
int i = 0;
for(i=0;i<n;i++)
{
scanf("%d ",&arr[i]);
}
}
void My_printf(int arr[],int n) //输出前五名成绩
{
int i = 0;
for(i = 0;i<n;i++)
{
printf("%d ",arr[i]);
}
}
void bubble_arr(int arr[],int n) // 排序
{
int i = 0;
int j = 0;
int temp = 0;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(arr[i]<arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
int main()
{
int n = 0;
scanf("%d",&n);
int arr[n];
My_scanf(arr,n);
bubble_arr(arr,n);
My_printf(arr,5);
return 0;
} #include <stdio.h>
int cmp_int(const void* e1, const void* e2) {
//return (*(int*)e1 - *(int*)e2); //升序
return (*(int*)e2 - *(int*)e1); //降序
}
int main() {
int n;
scanf("%d", &n);
int arr[500] = { 0 };
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
qsort(arr, n, sizeof(arr[0]), cmp_int);
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
return 0;
} #include <malloc.h>
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int*a = (int*)malloc(sizeof(int) * n);
//输入
for(int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
//冒泡排序
for(int i = 0; i < n -1; i++)
{
for(int j = 0; j <n -1-i; j++)
{
if(a[j + 1]> a[j])
{
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
//打印前五个
for(int i = 0; i <5; i++)
{
printf("%d ",a[i]);
}
return 0;
} /*
思路 :
第一行输入几个学生成绩
第二行输入学生成绩
然后进行比较 只打印出前五名成绩
*/
# include <stdio.h>
int main ()
{
int n = 0;
// 有范围
//用户输入几个学生成绩
scanf("%d",&n);
int arr[n];
int i = 0;
//用户输入的成绩
for(i = 0; i<n; i++)
{
scanf("%d",&arr[i]);
}
//开始比较大小 使用冒泡排序
int temp = 0;
for(int j = 0; j<n;j++)//第j位为最大数
{
for(int k = 0; k<n;k++)//从第i+1位开始遍历数组
{
if(arr[j]>arr[k])//存在大于最大数的数
{
temp = arr[j];//把最大数和比较数进行交换
arr[j] = arr[k];
arr[k] = temp;
}
}
}
for(int a = 0; a<5;a++)
{
printf("%d ",arr[a]);
}
return 0;
} #include <stdio.h>
#include<stdlib.h>
int cmp_int(const void* e1, const void* e2) {
return *(int*)e1 - *(int*)e2;
}
int main() {
int n = 0;
int arr[40] = { 0 };
int i = 0;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
qsort(arr, n, 4, cmp_int);
for (i = n - 1; i >= n - 5; i--) {
printf("%d ", arr[i]);
}
return 0;
} #include <stdio.h>
int main() {
int n;
scanf("%d",&n);
int arr[n];
int i;
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
int j;
//选择排序从大到小
for(i=0;i<n-1;i++){
int temp;
for(j=i+1;j<n;j++){
if(arr[i]>arr[j]){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//倒数5个分别为成绩最好的
for(i=n-1;i>=n-5;i--){
printf("%d ",arr[i]);
}
return 0;
} #include <stdio.h>
#include <malloc.h>
int main()
{
int arr[5] = {0};
int max = 0;
int n = 0;
int* p = NULL;
int i = 0;
int j = 0;
scanf("%d", &n);
//开辟空间存放成绩
p = (int*)malloc(sizeof(int) * n);
if(!p)
{
perror("malloc");
return 1;
}
//输入数据
for(i = 0; i < n; i++)
{
scanf("%d", p + i);
}
//寻找前五分数
for(i = 0; i < 5; i++)
{
max = 0;
//寻找当前最高分
for(j = 0; j < n; j++)
{
if(*(p + j) > max)
{
max = *(p + j);
}
}
arr[i] = max;
//删去当前最高分数
for(j = 0; j < n; j++)
{
if(max == *(p + j))
{
*(p + j) = 0;
break;//因为可能会有同分现象,所以一定要break
}
}
}
//输出前五分数
for(i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
//释放开辟的空间
free(p);
p = NULL;
return 0;
} #include <stdio.h>
int main() {
int n, score,count = 0;
int arr[101][50] ={0}; // 0-100的成绩,50个学生
scanf("%d", &n);
for (int i =0 ; i < n ; i++){
scanf("%d", &score);
arr[score][i] = score;
}
for (int j = 100 ; j >= 0 ; j--){
for (int k = 0; k < n; k++){
if (arr[j][k] != 0){ //最大成绩包含0, 程序错误
count += 1;
if (count > 5) { break;}
printf("%d ", arr[j][k]);
}
}
}
return 0;
} #include <stdio.h>
int main()
{
int n = 0;
int arr[100];
int c = 0;
while(scanf("%d",&n)!=EOF)
{
for(int i = 0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(int i = 0;i<n;i++)
{
for(int j = n-1;j>i;j--)
{
if(arr[i]<arr[j])
{
c = arr[j];
arr[j] = arr[i];
arr[i] = c;
}
}
}
printf("%d %d %d %d %d",arr[0],arr[1],arr[2],arr[3],arr[4]);
}
return 0;
} #include <stdio.h>
int main() {
int a,s,d,f,g;
scanf("%d",&a);
int buf;
int b[a];
for(s=0;s<a;++s)
{
scanf("%d",&b[s]);
}
for(f=1;f<a;++f)
{
for(d=0;d<a-f;d++)
{
if(b[d+1]>b[d])
{ buf=b[d];
b[d]=b[d+1];
b[d+1]=buf;
}
}}
printf("%d %d %d %d %d",b[0],b[1],b[2],b[3],b[4]);
return 0;
} 冒泡排序