浙大2010考研复试上机题——奥运排序问题

上午做了下这道排序题,题目链接:http://ac.jobdu.com/problem.php?id=1007

题目就是纯粹的模拟题,注意只需对后输入的m个国家排序即可。代码如下:

 1 #include <iostream>
2 #include <cstdio>
3 using namespace std;
4
5 struct Olym{
6 int goldmedal,medal,po,rank[5];
7 double gpo,mpo;
8 }nation[200];
9
10 int todo[200]; //存待排序的国家的编号
11
12 int main()
13 {
14 int n,m;
15 while(scanf("%d %d",&n,&m) != EOF)
16 {
17 for(int i=0;i<n;i++)
18 {
19 scanf("%d %d %d",&nation[i].goldmedal,&nation[i].medal,&nation[i].po);
20 nation[i].gpo = (double)nation[i].goldmedal / nation[i].po;
21 nation[i].mpo = (double)nation[i].medal / nation[i].po;
22 }
23 for(int i=0;i<m;i++)
24 {
25 scanf("%d",&todo[i]);
26 for(int j=1;j<5;j++)
27 nation[todo[i]].rank[j] = 1;
28 }
29 for(int i=0;i<m;i++)
30 {
31 for(int k=0;k<m;k++)
32 {
33 if(nation[todo[i]].goldmedal < nation[todo[k]].goldmedal)
34 nation[todo[i]].rank[1]++;
35 if(nation[todo[i]].medal < nation[todo[k]].medal)
36 nation[todo[i]].rank[2]++;
37 if(nation[todo[i]].gpo < nation[todo[k]].gpo)
38 nation[todo[i]].rank[3]++;
39 if(nation[todo[i]].mpo < nation[todo[k]].mpo)
40 nation[todo[i]].rank[4]++;
41 }
42 int high = 1;
43 for(int j=2;j<5;j++)
44 if(nation[todo[i]].rank[high] > nation[todo[i]].rank[j])
45 high = j;
46 printf("%d:%d\n",nation[todo[i]].rank[high],high);
47 }
48 printf("\n");
49 }
50 return 0;
51 }



posted @ 2012-03-07 13:36  HanTQ  阅读(216)  评论(0编辑  收藏  举报