http://ac.jobdu.com/problem.php?pid=1007
题目描述:
按要求,给国家进行排名。
输入:
有多组数据。
第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
接下来一行给出M个国家号。
输出:
排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例
对每个国家给出最佳排名排名方式 和 最终排名
格式为: 排名:排名方式
如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例
如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4.
每组数据后加一个空行。
样例输入:
4 4
4 8 1
6 6 2
4 8 2
2 12 4
0 1 2 3
4 2
8 10 1
8 11 2
8 12 3
8 13 4
0 3
样例输出:
1:3
1:1
2:1
1:2
1:1
1:1
/*
* main.c
*
* Created on: 2013-1-18
* Author: GaoTong
*/
#include <stdio.h>
#include <stdlib.h>
//如果要优化的话,其实可用数组代替。 原理是一样的。
typedef struct Node {
int index, gold, total, people;
} Node, *pNode;
//本来打算用排序函数的,后来发现没有必要. 只对单个属性排序就行,没有必要排序这个对象。
//函数指针 数组. 函数名本身就是一个指针,执行函数的入口地址
//int (* funArr[4])(const void *, const void *);
int n, m;
pNode contrys; //存储国家信息
//定义要排序的国家
int * conIndexs;
int main() {
while (scanf("%d %d", &n, &m) != EOF) {
contrys = (pNode) malloc(n * sizeof(Node));
conIndexs = (int *) malloc(m * sizeof(int));
int i;
for (i = 0; i < n; i++) { //读取国家的信息
scanf("%d %d %d", &contrys[i].gold, &contrys[i].total,
&contrys[i].people);
contrys[i].index = i;
}
//读取需要排序的国家
for (i = 0; i < m; i++)
scanf("%d", &conIndexs[i]);
for (i = 0; i < m; i++) {
int lasttype = 1;
int lastcnt = n;
//依次用不同的排序方式
int type;
for (type = 1; type <= 4; type++) {
int cnt = 1;
int j;
//这里指比较需要 排名的国家,不是对所有国家的进行排名
for (j = 0; j < m; j++) {
//依次和其它国家比较, 如果其它国家比我大,排名就加1
if (i != j) {
if (type == 1) {
if (contrys[conIndexs[i]].gold < contrys[conIndexs[j]].gold)
cnt++;
}
else if (type == 2) {
if (contrys[conIndexs[i]].total < contrys[conIndexs[j]].total)
cnt++;
}
else if (type == 3) {
if (contrys[conIndexs[i]].gold * contrys[conIndexs[j]].people < contrys[conIndexs[j]].gold *contrys[conIndexs[i]].people)
cnt++;
}
else if (type == 4) {
if (contrys[conIndexs[i]].total * contrys[conIndexs[j]].people < contrys[conIndexs[j]].total *contrys[conIndexs[i]].people)
cnt++;
}
}
//printf("cnt: %d ",cnt);
}
//printf("\n");
if (lastcnt > cnt) {
lastcnt = cnt;
lasttype = type;
}
}
printf("%d:%d\n", lastcnt, lasttype);
}
printf("\n");
}
return 0;
}
不用结构体,还是原来的算法。
#include <stdio.h>
#include <stdlib.h>
int * gold, * total, * people;
int n, m;
//定义要排序的国家
int * conIndexs;
int main() {
while (scanf("%d %d", &n, &m) != EOF) {
gold = (int *) malloc(n * 4);
total = (int *) malloc(n * 4);
people = (int *) malloc(n * 4);
conIndexs = (int *) malloc(m * 4);
int i;
for (i = 0; i < n; i++) { //读取国家的信息
scanf("%d %d %d", &gold[i], &total[i], &people[i]);
}
//读取需要排序的国家
for (i = 0; i < m; i++)
scanf("%d", &conIndexs[i]);
for (i = 0; i < m; i++) {
int lasttype = 1;
int lastcnt = n;
//依次用不同的排序方式
int type;
for (type = 1; type <= 4; type++) {
int cnt = 1;
int j;
//这里指比较需要 排名的国家,不是对所有国家的进行排名
for (j = 0; j < m; j++) {
//依次和其它国家比较, 如果其它国家比我大,排名就加1
if (i != j) {
if (type == 1) {
if (gold[conIndexs[i]] < gold[conIndexs[j]])
cnt++;
} else if (type == 2) {
if (total[conIndexs[i]] < total[conIndexs[j]])
cnt++;
} else if (type == 3) {
if (gold[conIndexs[i]] * people[conIndexs[j]]
< gold[conIndexs[j]] * people[conIndexs[i]])
cnt++;
} else if (type == 4) {
if (total[conIndexs[i]] * people[conIndexs[j]]
< total[conIndexs[j]]
* people[conIndexs[i]])
cnt++;
}
}
}
if (lastcnt > cnt) {
lastcnt = cnt;
lasttype = type;
}
}
printf("%d:%d\n", lastcnt, lasttype);
}
printf("\n");
}
return 0;
}
分享到:
相关推荐
实验7: 内部排序算法比较.doc 实验7: 内部排序算法比较.doc 实验7: 内部排序算法比较.doc
吉林省2010的数学建模题题目A:学科评价模型题目 B:出租车交接班模型
实验题目2:数组合并与排序 实验题目3:填充矩阵 实验题目4:字串处理 实验题目5:寻找子串 实验六:指针 实验题目1:函数指针应用 实验题目2:指针作为函数参数 实验题目3:单词排序 实验题目4:数字与月份 实验...
题目一: 内排序算法比较 1) 对以下6种常用的内部排序算法进行比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。 2) 待排序记录的文件个数不小于1000( 其数据用伪随机数产生),至少用5组...
第一届“中国软件杯”大学生软件设计大赛比赛题目四:基于Web的3D智能虚拟人.docx第一届“中国软件杯”大学生软件设计大赛比赛题目四:基于Web的3D智能虚拟人.docx第一届“中国软件杯”大学生软件设计大赛比赛题目四...
《数据结构课程设计》任务书 设计题目:各种排序算法的实现.pdf
实验报告,内含设计思想、实验代码及注释、验证与结论、总结与心得体会等。 实验一:运行环境及顺序结构 实验题目1:C编程环境 实验题目2:简单的四则运算实现 实验题目3:字母密码 ...实验题目6:闰年问题
2018强网杯CTF___题目整理 │ ├── 01Misc-4题 │ ├── 题目名称:ai-nimals │ │ └── 题目名称:ai-nimals.mhtml │ ├── 题目名称:welcome │ │ └── 题目名称:welcome.mhtml │ ├── 题目名称:...
大学生数学建模:个人小论文题目:最佳组队题目.pdf大学生数学建模:个人小论文题目:最佳组队题目.pdf大学生数学建模:个人小论文题目:最佳组队题目.pdf大学生数学建模:个人小论文题目:最佳组队题目.pdf大学生...
大学生数学建模:个人小论文题目:最佳组队题目.docx大学生数学建模:个人小论文题目:最佳组队题目.docx大学生数学建模:个人小论文题目:最佳组队题目.docx大学生数学建模:个人小论文题目:最佳组队题目.docx大学...
实验题目:排序方法的实现与实验比较 实验内容: 实现一组经典的排序算法,通过实验数据的设计,考察不同规模和分布(正 序序列、反序序列和随机序列)的数据对排序算法运行时间影响的规律,验证理 论分析结果的...
毕设题目:关于HEVC帧间预测测试AMP模式的快速算法 毕设题目:关于HEVC帧间预测测试AMP模式的快速算法 毕设题目:关于HEVC帧间预测测试AMP模式的快速算法 毕设题目:关于HEVC帧间预测测试AMP模式的快速算法 毕设题目...
按“手动”菜单演示数组数据排序的移动过程,按“暂停”菜单结束排序演示过程。 在客户区正确显示当前数组数据的移动过程。点击“手动演示”菜单一步一步查看过程。点击“自动”实现自动演示(每次移动间隔1s)。 在...
题目19:基于MATLAB的电力系统复杂潮流计算.docx题目19:基于MATLAB的电力系统复杂潮流计算.docx
实验题目18:WINS服务器的配置和管理
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:1.递归(吗);2.不会(3);3.想不到;4.谷歌;5.一个一个...
结构题目04:选举 真.cpp
题目一:人事管理系统 1、系统功能的基本要求: (1)员工各种信息的输入,包括员工的基本信息、学历信息、婚姻状况信息、职称等。 (2)员工各种信息的修改; (3)对于转出、辞职、辞退、退休员工信息的删除; ...