华为机试HJ94:记票统计

简介: 华为机试HJ94:记票统计

题目描述:

请实现一个计票统计系统。你会收到很多投票,其中有合法的也有不合法的,请统计每个候选人得票的数量以及不合法的票数。

本题有多组样例输入。

输入描述:

输入候选人的人数n,第二行输入n个候选人的名字(均为大写字母的字符串),第三行输入投票人的人数,第四行输入投票。

输出描述:

按照输入的顺序,每行输出候选人的名字和得票数量,最后一行输出不合法的票数。

示例:

输入:

4

A B C D

8

A D E CF A GG A B


输出:

A : 3

B : 1

C : 0

D : 1

Invalid : 3

解题思路:

这题是个容器考察题。用vector存放候选人名字,用hash map容器flags存放候选人标志符,用values存放候选人票数;当进行投票时,判断下flags[vote]是否为true,若是则为候选人,有效票所以票数+1,若不是则无效票计数+1;最后按顺序输出vector即可。


这道题因为输出顺序与开始的候选人顺序一致,所以用vector来做好一些,如果要求输出结果按字母排序,最好用map,因为可以自动实现排序。

测试代码:

#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <algorithm>
using namespace std;
int main()
{
    int number;
    while(cin>>number)
    {
        vector<string> m(number);
        unordered_map<string, bool> flags(number);
        unordered_map<string, int> values(number);
        for(int i=0;i<number;++i)
        {
            string candidate;
            cin>>candidate;
            m[i]=candidate;
            flags[candidate]=true;
        }
        int n;
        cin>>n;
        int invalid=0;
        for(int j=0;j<n;++j)
        {
            string vote;
            cin>>vote;
            if(flags[vote]==true)
            {
                values[vote]++;
            }
            else{
                invalid++;
            }
        }
        for(int j=0;j<number;++j)
        {
            cout<<m[j]<<" : "<<values[m[j]]<<endl;
        }
        cout<<"Invalid : "<<invalid<<endl;
    }
    return 0;
}
相关文章
华为机试HJ103:Redraiment的走法
华为机试HJ103:Redraiment的走法
184 2
华为机试HJ96:表示数字
华为机试HJ96:表示数字
110 1
|
容器
华为机试HJ102:字符统计
华为机试HJ102:字符统计
163 1
华为机试HJ75:公共子串计算
华为机试HJ75:公共子串计算
|
大数据 测试技术 索引
华为机试HJ25:数据分类处理
华为机试HJ25:数据分类处理
|
搜索推荐 容器
华为机试HJ68:成绩排序
华为机试HJ68:成绩排序
|
容器
华为机试HJ93:数组分组
华为机试HJ93:数组分组
|
算法 测试技术
华为机试HJ67:24点游戏算法
华为机试HJ67:24点游戏算法
104 0
|
机器学习/深度学习 C++
华为机试HJ16:购物单
华为机试HJ16:购物单