首页 > 编程知识 正文

华为机试多少分通过,牛客网刷题华为机试

时间:2023-05-03 15:12:13 阅读:229803 作者:2837

作者:顺利的台灯Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

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

本题有多组样例输入。

输入描述:

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

输出描述:

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

示例:

输入:

4A B C D8A D E CF A GG A B

输出:

A : 3B : 1C : 0D : 1Invalid : 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;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。