期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入 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> void bubbleSort(int *arr,int x){//冒泡排序算法 int m,a,b; for(a=0;a<x-1;a++) for(b=0;b<x-1-a;b++) if(arr[b]<arr[b+1]) { m=arr[b]; arr[b]=arr[b+1]; arr[b+1]=m; } } main(){ int n; scanf("%d",&n);//输入n if(n>=5){ int grades [n],i; for(i=0;i<n;i++){ scanf("%d",&grades[i]);//将输入的n个元素存入数组 } bubbleSort(grades, n);//冒泡排序 for(i=0;i<5;i++){//筛选出前五个 printf("%d ",grades[i]);} int getche(void); } return 0; }将学生成绩输入并存储到元素数量为n的数组中,然后利用冒泡排序算法对学生成绩进行由高到低的排序,筛选出前五个并输出。
#include<iostream> using namespace std; int main(void) { int n; cin>>n; int score[n]; for(int s=0;s<n;s++) cin>>score[s]; //排序总轮数=元素个数-1 for(int i=0;i<n-1;i++) { //每次对比次数=元素个数-当前轮数-1 for(int j=0;j<n-i-1;j++) if(score[j]<score[j+1]) { int temp=score[j]; score[j]=score[j+1]; score[j+1]=temp; } } for(int k=0;k<5;k++) cout<<score[k]<<" "; }小小冒泡排序,不成敬意,各位大神勿喷
import java.util.Arrays; import java.util.Scanner; public class Main5 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int[] array = new int[sc.nextInt()]; for (int i = 0; i < array.length; i++) { array[i] = sc.nextInt(); } Arrays.sort(array); for(int i=0;i<array.length/2;i++) { int temp = array[i]; array[i]= array[array.length-i-1]; array[array.length-i-1] = temp; } for (int i = 0; i < 5; i++) { System.out.print(array[i]+" "); } } } }
#include <iostream> using namespace std; const int N = 60; int n; int q[N]; void quick_sort (int q[], int l, int r) { if (l >= r) return; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i < j) { do i++; while (q[i] > x); do j--; while (q[j] < x); if (i < j) swap(q[i], q[j]); } quick_sort(q, l, j); quick_sort(q, j + 1, r); } int main () { scanf("%d", &n); for (int i = 0;i < n; i++) scanf("%d", &q[i]); quick_sort (q, 0, n - 1); for(int i = 0; i < 5; i++) printf("%d ", q[i]); return 0; }
#include<stdio.h> #include<stdlib.h> int compare(const void*e1,const void*e2) { return *(int*)e1-*(int*)e2; } int main() { int arr[50]={0}; int n=0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&arr[i]); } int temp=0; /*for(int j=0;j<n-1;j++) { for(int m=0;m<n-1-j;m++) { if(arr[m]<arr[m+1]) { temp=arr[m]; arr[m]=arr[m+1]; arr[m+1]=temp; } } }*/ qsort(arr,n,4,compare); /*for(int k=0;k<5;k++) { printf("%d ",arr[k]); }*/ for(int k=n-1;k>=n-5;k--) printf("%d ",arr[k]); return 0; }
#include<stdio.h> //简单化桶排序 int main() { int a[101],n,i,j,t; for(i=0;i<=100;i++) a[i]=0; scanf("%d",&n); for(j=1;j<=n;j++) { scanf("%d",&i);//读入数据到变量i中 a[i]++;//进行计数,读入一个数组元素加一 } t=0; for(i=100;i>=0;i--) { for(j=1;j<=a[i];j++) { t++; printf("%d ",i); if(t==5) break; } if(t==5) break; } return 0; }
#include <stdio.h> #include <stdlib.h> int cmp_int(const void* s1, const void* s2) {//比较函数 return *(int*)s2-*(int*)s1; } int main() { int i = 0; int n = 0; int arr[40]; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } qsort(arr,//要比较的数组 n,//要比较的个数 sizeof(arr[0]),//每个元素的大小(字节) cmp_int);//自定义比较函数 int j = 0; for (j = 0; j < 5; j++)//题目要求是打印前五个 { printf("%d ", arr[j]); } return 0; }冒泡排序
#include <stdio.h> void maopao(int arr[], int sz) { int i = 0; int j = 0; for (i = 0; i < sz - 1; i++) {//总共要冒泡数字总数减一次 for (j = 0; j < sz - 1 - i; j++) {//剩下的要排列的数就是冒泡次数减去冒泡完的数字 if (arr[j] < arr[j + 1]) { int jh = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = jh; } } } } int main() { int arr[40]; int n = 0; int i = 0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&arr[i]); } maopao(arr,n); for(i=0;i<5;i++) { printf("%d ",arr[i]); } return 0; }
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); List<Integer> list = new ArrayList<>(); int k = Integer.parseInt(s); for (int i = 0; i < k; i++) { int a = scanner.nextInt(); list.add(a); } Collections.sort(list); // 反转 Collections.reverse(list); for (int j = 0; j < 5; j++) { System.out.print(list.get(j)); System.out.print(" "); } } }
#include<bits/stdc++.h> using namespace std; int main() { int n; cin >> n; priority_queue<int, vector<int>, greater<int>> pq; int a; while(n--) { cin >> a; if(pq.size()<5) pq.push(a); else if(pq.top()<a) { pq.pop(); pq.push(a); } } vector<int> ans(5); for(int i=4;i>=0;i--) { ans[i] = pq.top(); pq.pop(); } for(int i=0;i<5;i++) cout << ans[i] << ' '; cout << endl; return 0; }
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int max=0; int score[]=new int[41]; for(int i=0; i<n; i++){ int score1=sc.nextInt(); score[i]=score1; } //选择排序 /*for(int i=0; i<n; i++){ for(int j=i+1; j<n; j++){ int temp; if(score[i]<score[j]){ temp=score[i]; score[i]=score[j]; score[j]=temp; } } }*/ //冒泡排序 for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ int temp; if(score[j]<score[j+1]){ temp=score[j]; score[j]=score[j+1]; score[j+1]=temp; } } } for(int i=0; i<5; i++){ System.out.printf("%d ",score[i]); } } }
#include<cstdio> #include<cstdlib> /*如果数组很大,熟悉数据结构的同学也可以用建堆的方法输出最大的前5个数*/ int main() { int n,*date,i,j,k; scanf("%d",&n); date=(int *)malloc(sizeof(int)*(n+1));//输入的n来决定数组大小,PS:指针和数组是等价的 for(i=1;i<=n;i++) scanf("%d",&date[i]);//输入成绩 for(i=0;i<5;i++)//寻找5次 { date[0]=0;//用date[0]来存放最大值 for(j=1;j<=n;j++) { if(date[j]>date[0])//如果此时的数大于date[0],则更新date[0] {date[0]=date[j]; k=j;//记录最大值的数组下标 } } date[k]=0;//将原最大值改为0,避免下次再次输出。 printf("%d ",date[0]); } return 0; }
#include<stdio.h> #include<stdlib.h> void Swap(int* p , int n) //冒泡排序 { int h = 1; //用于判断是否已经有序,如果是则跳出循环不必继续执行 for(int i=1; i<=n; i++) { if (0 == h) { break; } else { h = 0; } for(int j=0; j<n - i; j++) { if(*(p+j) < *(p+j+1)) { *(p+j) ^= *(p+j+1); *(p+j+1) ^= *(p+j); *(p+j) ^= *(p+j+1); h = 1; } } } } int main() { int* p = NULL; int n; scanf("%d" , &n); p = malloc(n*sizeof(int)); //使用malloc()可以开辟任意大小空间 for(int i = 0;i < n; i++) { scanf("%d" ,p + i); } Swap(p , n); for(int i = 0;i < 5; i++) { printf("%d " , *(p + i) ); } free(p); //释放堆空间 p = NULL; return 0; }
#include<stdio.h> int main() { int i,j,t,k; int score[100]={0}; scanf("%d",&k); for(j=0;j<k;j++) scanf("%d",&score[j]); for(i=0;i<k-1;i++) for(j=0;j<k-1-i;j++) if(score[j]<score[j+1]) { t=score[j]; score[j]=score[j+1]; score[j+1]=t; } for(i=0;i<5;i++) printf("%d ",score[i]); return 0; }