HNU 12845 Ballot Analyzing Device

题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12845&courseid=270

解题报告:有m个认给n个人投票,n个认位置是固定的,输入一行字符,X表示会投给这个人,例如X....这个表示会投给第一个人,然后让你分别求出这n个人分别占总

票数的百分之几,如果两个人票数相同,则按照原来固定的顺序。

水题,注意任意一个人投的票要有效的话必须满足至少并且只能投一个人。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 using namespace std;
 7 struct node
 8 {
 9     char name[100];
10     double num,ans;
11     int cixu;
12 }men[15];
13 char str[15];
14 bool cmp(node a,node b)
15 {
16     if(a.num == b.num)
17     return a.cixu < b.cixu;
18     return a.num > b.num;
19 }
20 int main()
21 {
22     int n,m;
23     while(scanf("%d%d",&n,&m)!=EOF)
24     {
25             for(int i = 0;i < n;++i)
26             {
27                 scanf("%s",men[i].name);
28                 men[i].num = 0;
29                 men[i].cixu = i;
30             }
31             strcpy(men[n].name,"Invalid");
32             int tt = m;
33             while(tt--)
34             {
35                 scanf("%s",str);
36                 int f = -1;
37                 for(int i = 0;i < n;++i)
38                 if(str[i] == 'X')
39                 {
40                     if(f == -1) f = i;
41                     else f = n;
42                 }
43                 if(f == -1) f = n;
44                 men[f].num++;
45             }
46             for(int i = 0;i <= n;++i)
47             men[i].ans = 100.0 * men[i].num /  (double)m;
48             sort(men,men+n,cmp);
49             for(int i = 0;i <= n;++i)
50             printf("%s %.2lf%%
",men[i].name,men[i].ans);
51     }
52     return 0;
53 }
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3872409.html