首页 > 试题广场 >

争夺前五名

[编程题]争夺前五名
  • 热度指数:47909 时间限制: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>
 
int main()
{
    int n;
    scanf("%d",&n);
    int a[n];
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    int count=0;
    do{
    int max=a[0];
    for(int i=0;i<n;i++){
        if(max<=a[i]) max=a[i];
    }
    printf("%d ",max);
    for(int i=0;i<n;i++){
        if(max==a[i]){
        a[i]=0;
        break;
        }
    }
    count++;
    }while(count<=4);

    return 0;
   
}
发表于 2024-11-06 11:29:52 回复(1)
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int arr[100];
    int i;
    for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
    }
    for(i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(arr[i]<arr[j]){
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
    for(i=0;i<5;i++){
        printf("%d ",arr[i]);}
    return 0;

}
发表于 2024-10-18 14:38:04 回复(0)
int main()
{
int number=0,n[50]={0};
int x,a=0; int i;
int max;int temp;
scanf("%d\n",&number);
for(x=0;x<number;x++)
    scanf("%d",&n[x]) ;
    
    for(a=0;a<number-1;a++ )
    {
for(i=0;i<number-1-a;i++)
{
    if(n[i]<n[i+1])//if(n[i]>n[i+1])
    {
        temp=n[i];
        n[i]=n[i+1];
        n[i+1]=temp;
    }
 } 
}
 for(i=0;i<number;i++)
 printf("%d ",n[i]);
    return 0;
}
发表于 2024-09-16 20:25:26 回复(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;
}

发表于 2024-08-01 17:00:08 回复(0)
#include <stdio.h>
int main()
{
    int n=0;
    scanf("%d",&n);
    int a[100]={0};
    for(int i=0;i<n;i++)
    {
        scanf("%d",a+i);
    }
    for(int i=0;i<n-1;i++)
    {
        int k=i;
        for(int j=i+1;j<n;j++)
        {
            if(a[j]>a[k])
            {
                k=j;
            }
        }
        if(k!=i)   //用选择法冒泡法均可  建议哪个用的不熟悉就用哪个多写写
        {
            int t=a[i];
            a[i]=a[k];
            a[k]=t;
        }
    }
    for(int i=0;i<5;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}
发表于 2024-07-13 17:26:29 回复(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;
}

发表于 2024-06-21 16:36:19 回复(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;
}

发表于 2024-06-09 23:09:37 回复(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;
}

发表于 2024-04-15 15:49:23 回复(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;
}

编辑于 2024-03-22 22:23:59 回复(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;
}

编辑于 2024-03-18 21:34:05 回复(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;
}

发表于 2024-02-10 09:01:54 回复(0)
#include <stdio.h>
void test(int *arr,int n){
    for (int i = 0; i < n-1; i++)
    {
        for (int j = 0;j < n - 1 - i;j++) {
            if (arr[j]<arr[j+1])
            {
                int tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    for ( int i = 0; i<5 ; i++)
    {
        printf("%d ",arr[i]);
    }
}
int main() {
    int arr[999] = { 0 };
    int n;
    scanf("%d",&n);
    for (int  i = 0; i < n; i++)
    {
        scanf("%d",&arr[i]);
    }
    test(arr,n);
    return 0;
}
发表于 2023-11-24 11:08:19 回复(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;
}

发表于 2023-11-17 13:52:08 回复(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;
}
冒泡排序
发表于 2023-10-04 16:06:06 回复(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;
}

发表于 2023-09-13 16:10:19 回复(0)
#include <stdio.h>

int main() {
    int n, stu_score[50];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &stu_score[i]);
    }
    for (int i = 0; i < n-1; i++) {
        for (int j = 1+i; j < n; j++) {
            if (stu_score[i] < stu_score[j]) {
                int temp = stu_score[i];
                stu_score[i] = stu_score[j];
                stu_score[j] = temp;
            }
        }
    }
    for (int k=0; k<5; k++) {
        printf("%d ",stu_score[k]);
    }
}
发表于 2023-08-21 10:47:57 回复(0)
#include <stdio.h>
void maopao(int*arr,int a)
{
    int i=0;
    for(i=0;i<a-1;i++)
    {
        int j=0;
        for(j=0;j<a-1-i;j++)
        {
            if(arr[j]<arr[j+1])
            {
                int mep=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=mep;
            }
        }
    }
}
int main()
{
    int arr[50];
    int a=0;
    scanf("%d",&a);
    int i=0;
    for(i=0;i<a;i++)
    {
        scanf("%d",&arr[i]);
    }
    maopao(arr,a);
    for(i=0;i<5;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}
发表于 2023-08-07 19:13:24 回复(0)
用两个数组记录数据,grade数组记录输入成绩,result按大小记录前五成绩。
用for循环在grade数组中依次寻找最值,并且每次找到后将其置0以实现下一次寻找。
ps:不知道如何实现在不改变grade数组的情况下将前五的成绩放入result中,,,
#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int grade[n];
    for(int i = 0; i < n; i++) {
        scanf("%d", &grade[i]);
    }
    int result[5];
    int r = 0;
    for(int i = 0; i < 5; i++) {
        result[i] = 0;
        for(int j = 0; j < n; j++) {
            if(result[i] < grade[j]) {
                r = j;
                result[i] = grade[j];
            }
        }
        grade[r] = 0;
    }
    for(int i = 0; i < 5; i++) {
        printf("%d ", result[i]);
    }
    return 0;
}
发表于 2023-07-13 18:19:09 回复(0)
#include <stdio.h>

void bbulbsort(int arr[],int sz)
{
    for(int i=0;i<sz-1;i++)
    {
        for(int j=0;j<sz-1-i;j++)
        {
            if(arr[j]<arr[j+1])
            {
                int tmp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tmp;
            }
        }
    }
}

int main()
{
   int a,b,c;
   scanf("%d",&a);
   int arr[a];
   for(int i=0;i<a;i++)
   {
    scanf("%d ",&arr[i]);
   }
   bbulbsort(arr,a);
   for(int i=0;i<5;i++)
   {
    printf("%d ",arr[i]);
   }
}
发表于 2023-04-08 00:58:50 回复(0)