华为OJ之奥运会金牌排名显示国家名称

题目描述如下:

2012伦敦奥运会即将到来,大家都非常关注奖牌榜的情况,现在我们假设奖牌榜的排名规则如下:

 
  1. 1、首先gold medal数量多的排在前面;
    2、其次silver medal数量多的排在前面;
    3、然后bronze medal数量多的排在前面;
    4、若以上三个条件仍无法区分名次,则以国家名称的字典序排定。

我们假设国家名称不超过20个字符、各种奖牌数不超过100,且大于等于0。

解答要求时间限制:1000ms, 内存限制:64MB

输入

第一行输入一个整数N(0<N<21),代表国家数量;
然后接下来的N行,每行包含一个字符串Namei表示每个国家的名称,和三个整数Gi、Si、Bi表示每个获得的gold medal、silver medal、bronze medal的数量,以空格隔开,如(China 51 20 21),具体见样例输入。

输出

输出奖牌榜的依次顺序,只输出国家名称,各占一行,具体见样例输出。

样例

输入样例 1 复制

5
China 32 28 34
England 12 34 22
France 23 33 2
Japan 12 34 25
Rusia 23 43 0

输出样例 1

China
Rusia
France
Japan
England

 

答案如下:

这里还熟悉了qsort这个函数。

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

参数

  • base-- 指向要排序的数组的第一个元素的指针。

  • nitems-- 由 base 指向的数组中元素的个数。

  • size-- 数组中每个元素的大小,以字节为单位。

  • compar-- 用来比较两个元素的函数,即函数指针(回调函数)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int num =0; 
typedef struct{
	char name[20];
	int gold;
	int silver;
	int bron;
}medal;


/*此处需要注意,字符比较的时候谁小谁在前面*/
int cmpare(medal *P1,medal *P2){
	int i=0;
	if(P1->gold != P2->gold) {return P2->gold - P1->gold;}
	if(P1->silver != P2->silver){return P2->silver - P1->silver;}
	if(P1->bron != P2->bron){return P2->bron - P1->bron;}
	else {
		for(i=0; i<20; i++){
			if(P1->name[i] > P2->name[i])
				return 1;
			else if(P1->name[i] < P2->name[i])
				return -1;
		}
	}
	return 0;

}
int main()
{ 
    int i;
	medal country[20] = {0};
	scanf("%d",&num);

	for(i=0;i<num;i++){
		scanf("%s",&country[i].name);
		scanf("%d",&country[i].gold);
		scanf("%d",&country[i].silver);
		scanf("%d",&country[i].bron);
	}
	qsort(country,num,sizeof(medal),cmpare);

	for(i=0; i< num; i++){
		printf("%s\r\n",country[i].name);	
	}
	return 0;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为OD机试是华为公司的在线笔试平台,用于选拔人才。根据题库的不同版本,2023年A、B版本的真题目录大致如下: 考点分类: 1. 数据结构与算法:包括数组、链表、栈、队列、树、图、排序算法、查找算法等。 2. 编程语言:主要考察C++或Java语言的基础知识,包括语法、数据类型、运算符、流程控制等。 3. 计算机网络:主要考察网络基础知识,包括HTTP、TCP/IP协议、网络安全等。 4. 操作系统:主要考察操作系统的基础知识,包括进程管理、内存管理、文件系统等。 5. 数据库:主要考察数据库基础知识,包括SQL语句的编写、数据库设计等。 6. 算法设计与分析:主要考察算法的设计思路和复杂度分析能力。 7. 编程综合能力:主要考察应聘者的编程能力和解决问题的能力,题目可能是一些综合性的编程题目。 在线OJ入口: 华为OD机试一般提供在线提交代码的平台,应聘者需要在平台上注册账号,并按照要求进行代码的提交与运行。具体的OJ入口链接将根据考试安排提供给应聘者,一般将在笔试前一段时间内向应聘者发送相关信息。 在进行华为OD机试的过程中,应聘者可以根据真题目录中的考点分类进行有针对性的复习和准备,熟悉相关知识点,并通过刷题进行练习来提高自己的编程能力和解题能力。希望以上信息能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值