打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
华为机试HJ94:记票统计

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

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

本题有多组样例输入。

输入描述:

输入候选人的人数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;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c++ vector, set, map的用法总结
C++STL与泛型编程(3)容器之分类与测试
面试官,别问我 Bit Operation 了!
C 代码简化之道
如何使用istream_iterator将cin转到vector? (C/C++) (STL)
解析字符串
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服