期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入 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;
}