期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入 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> 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; }冒泡排序
int main() { int arr[50] = {0}; int n = 0; //输入 scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } //冒泡排序 for (int i = 0; i < n - 1; ++i) { int flag = 0; for (int j = 0; j < n - i -1; ++j) { if (arr[j] < arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; flag = 1; } } if (flag == 0) { break; } } //输出 for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); } return 0; }