首页 > 试题广场 >

争夺前五名

[编程题]争夺前五名
  • 热度指数:47832 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入 n 个学生成绩,输出每组排在前五高的成绩。

数据范围: ,成绩采取百分制并不会出现负数

输入描述:
两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。


输出描述:
一行,输出成绩最高的前五个,用空格分隔。
示例1

输入

6
99 45 78 67 72 88

输出

99 88 78 72 67
示例2

输入

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的数组中,然后利用冒泡排序算法对学生成绩进行由高到低的排序,筛选出前五个并输出。
编辑于 2020-03-25 07:17:00 回复(0)

#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]<<" ";
}
小小冒泡排序,不成敬意,各位大神勿喷

发表于 2020-05-04 23:02:33 回复(2)
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]+" ");
			}
		}
	}

}
发表于 2020-11-15 20:50:24 回复(0)
#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;
}

发表于 2022-08-23 00:29:45 回复(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;
}

发表于 2022-05-12 16:10:20 回复(0)
#include <iostream>
#include <queue>
using namespace std;

int main()
{
    int n, x;
    cin >> n;
    priority_queue <int> a;
    for (int i = 0; i < n; i ++ ) cin >> x, a.push(x);
    for (int i = 0; i < 5; i ++ ) cout << a.top() << ' ', a.pop();
}

发表于 2022-02-26 14:36:12 回复(0)
#include<stdio.h>
int main()    
{
    int n, i, t, j, k = 0;
    int arr[30] = { 0 };
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    int max= 0;
    for (t = 0; t< 5; t++)
    {
        for (j = 0; j < n; j++)
        {
            if (arr[j]>max)
            {
                max = arr[j];
                k = j; //记录数组最大值下标
            }
        }
        printf("%d ", max);
        arr[k] = 0; max = 0;  //将最大值除去,下次循环第二大的为最大值,依次类推。
    }
    return 0;
}
发表于 2022-02-12 22:11:25 回复(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;
}


发表于 2021-10-01 10:26:05 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin>>n;
    vector<int> vec(n);
    for(int i = 0;i<n;i++) cin>>vec[i];
    sort(vec.begin(),vec.end());
    cout<<vec[n-1]<<" "<<vec[n-2]<<" "<<vec[n-3]<<" "<<vec[n-4]<<" "<<vec[n-5];
}
使用C需要手写排序算法,还是直接上C++好
发表于 2021-09-01 00:58:05 回复(0)
这道题有两种方法,一种是用qsort函数,还有就是冒泡排序,冒泡排序麻烦一点。我把两种都写一下吧!
qsort()函数
#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;
}



发表于 2021-02-13 23:08:54 回复(3)
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(" ");
        }
    }
}

发表于 2020-12-15 17:22:56 回复(0)
容量5的最小堆
#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;
}


发表于 2020-08-01 16:14:33 回复(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]);
		   }
	}
}

发表于 2020-07-10 10:03:54 回复(1)
#include<stdio.h>
int main()
{
    int n,a[20]={0};
    int i,j,t;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d ",&a[i]);
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(i=n-1;i>n-6;i--)
        printf("%d ",a[i]);
    return 0;
}

发表于 2021-07-07 15:54:43 回复(0)
#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;
}

编辑于 2020-03-23 17:58:03 回复(3)
#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;
}

发表于 2021-08-15 13:28:26 回复(1)
n=input()
l=list(map(int,input().split()))
l.sort(reverse=True)
for i in l[:5]:
    print(i,end=' ')

发表于 2021-06-03 00:16:44 回复(2)
#include <stdio.h>

int main(void)
{
    int n = 0;
    int arr[45] = {0};
    scanf("%d",&n);
    int i = 0;
    for(i = 0;i<n;i++)
    {
        scanf("%d ",&arr[i]);
    }
    //排序
    for(i = 0;i<n-1;i++)
    {
        int flag = 1;//假设这一趟要排序的数据已经有序
        int j = 0;
        for(j = 0;j<n-1-i;j++)
        {
            if(arr[j]>arr[j+1])
            {
                //交换
                int tmp = arr[j];
                arr[j] = arr[j+1];
                 arr[j+1] =tmp;
                flag = 0;
            }
        }
        if(flag == 1)
        {
            //说明已经有序
            break;
        }
    }
    //排序完成 输出成绩最高的5个数
    for(i = n-1;i>=n-5;i--)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}
发表于 2022-08-26 15:17:45 回复(2)
#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;
}

发表于 2021-10-30 10:44:55 回复(0)
#include<iostream>
using namespace std;
int main()
{
    int a;
    cin>>a;
    int b[40];
    for(int i = 0;i<a;i++)
        cin>>b[i];
    for(int i = 0;i<a-1;i++)
    {
        int t;
        for(int j = 0;j<a-i-1;j++)
        {
            if(b[j]<=b[j+1])
            {
                t = b[j];
                b[j] = b[j+1];
                b[j+1] =t;
            }
        }
    }
    for(int i = 0;i<5;i++)
        cout<<b[i]<<" ";
   
}
发表于 2021-07-10 14:20:43 回复(0)