微笑


私信TA

用户名:84491135

访问量:9385

签 名:

一只萌新

等  级
排  名 1388
经  验 2824
参赛次数 2
文章发表 9
年  龄 0
在职情况 学生
学  校 华南师范大学
专  业 软件工程

  自我简介:

一只萌新

解题思路:

    结构体+快速排序


参考代码:

#include <stdio.h>
#include <stdlib.h>
struct stu
{
	int num;//学号
	int a, b, c;//三科成绩
	int sum;//总分
};

int cmp(const void *a, const void *b)//自定义的比较方法
{
	int t1 = (*(struct stu *)b).sum - (*(struct stu *)a).sum;
	if(t1 == 0)
	{
		int t2 = (*(struct stu *)b).a - (*(struct stu *)a).a;
		if(t2 == 0)
		{
            return (*(struct stu *)a).num - (*(struct stu *)a).num;
		}
		else
			return t2;
	}
	else
		return t1;
}

int main()
{
	int n;
	scanf("%d", &n);
	struct stu st[n];
	for(int i=0; i<n; i++)
	{
		scanf("%d %d %d", &st[i].a, &st[i].b, &st[i].c);
		st[i].num = i+1;
		st[i].sum = st[i].a + st[i].b + st[i].c;
	}
	qsort(st,n,sizeof(st[0]),cmp);//快速排序
	for(int i=0; i<5; i++)
	{
		printf("%d %d\n",st[i].num,st[i].sum);
	}

    return 0;
}


 

0.0分

9 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

编译错误。老哥们看看
#include<stdio.h>
void swap(int *a,int *b)
{
	int temp=*a;
	*a=*b;
	*b=temp;
}
int main()
{
	int  n;
	int i,j;
	int a[100],b[100],c[100];
	int sum[100];
	int stu[100][2];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	scanf("%d%d%d",&a[i],&b[i],&c[i]);
	for(i=0;i<n;i++)
	sum[i]=a[i]+b[i]+c[i];
	for(i=0;i<n;i++)
	{
		stu[i][0]=i+1;
		stu[i][1]=sum[i];
		stu[i][2]=a[i];	
	} 
	for(i=0;i<n;i++)
	{
	 	for(j=n-1;j>i;j--)
	 	{
	 		if(stu[j][1]>stu[j-1][1])
	 		{
	 			swap(&stu[j][1],&stu[j-1][1]);
	 			swap(&stu[j][0],&stu[j-1][0]);
	 			swap(&stu[j][2],&stu[j-1][2]);
			}		 
		}
	}
	for(i=0;i<n;i++)
2022-11-20 17:16:38
break;
        }
    }
    //前五个分数最高的学号w[]
    //考虑总分相同语文成绩不一样和一样的情况
    int aa,t;
    //数组w是学号,b是总分,a是输入的各科
    for(i=1;i<=5;i++){
        aa=w[i];//学号学号学号是aa
        for(j=i;j<=5;j++){
            int bb=w[j];
            if(a[aa][0]<a[bb][0]){
                t=w[i];
                w[i]=w[j];
                w[j]=t;
            }
        }
    }
    //输出
    for(i=1;i<=5;i++){
        //输出共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。
        int d=w[i];
        printf("%d %d\n",w[i],b[d]);
    }

    return 0;

}
加上前面那个。。想问问大佬为什么提交了显示运行错误
2019-11-23 20:11:35
#include<stdio.h>
int main(){
    int n,i,j;
    int a[100][100];
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        for(j=0;j<3;j++){
            scanf("%d",&a[i][j]);//学号等于行数i
        }
    }
    //算总分
    int b[100];
    for(i=1;i<=n;i++){
        b[i]=a[i][0]+a[i][1]+a[i][2];
    }
    //可以先选出五个总分高的
    int w[5];
    w[0]=0;
    j=1;
    while(1){
        int t=0,q=0;
        for(i=1;i<=n;i++){
            if(b[i]>t&&i!=w[1]&&i!=w[2]&&i!=w[3]&&i!=w[4]){
            t=b[i];//for循环结束以后,选出一个最大值
            q=i;
            }

        }
        w[j]=q;//w[]存的是学号
        j++;
        if(j==6){
2019-11-23 20:09:48
怎么登陆不上
2018-11-27 15:42:31
struct stu st[n];
这里的n可以直接放里面吗
你的代码怎么贴的,竟然不会歪
2017-11-29 11:47:27
  • «
  • 1
  • »