华为给出的测试账号里面的题

本文主要探讨了华为在2015年发放的测试账号中包含的题目,详细解析了相关测试内容,包括可能涉及的技术点和解题思路。
摘要由CSDN通过智能技术生成

  1. 记票统计
    描述:

    模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用“A”、”B”、”C”、”D”表示,选举时开始计票, 若输入的不是“A”、”B”、”C”、”D”则视为无效票。选举结束后获取各个候选人的得票数以及无效票的个数,输出结果以添加候选人的顺序进行顺序输出,最后一行为无效的数量。同时getVoteResult命令为结束命令。

    运行时间限制:无限制
    内存限制:无限制
    输入:

    输入为多行形式输入,每一行为一条命令。输入的命令只会是有效命令不会有非法命令,但可能存在非法的投票,上面已经描述了。

    添加候选人的命令如下:addCandidate为命令 xx1为候选人

    addCandidate xx1

    投票的命令如下:vote为命令 xx1为候选人的字符串

    vote xx1

    统计投票的命令如下:getVoteResult为命令

    getVoteResult

    输出:

    输出结果以添加候选人的顺序进行顺序输出,最后一行为无效的数量。

    样例输入:addCandidate xx1addCandidate xx2addCandidate xx3addCandidate xx4addCandidate xx5addCandidate xx6vote xx1vote xx3vote xx4vote xx1vote xx2vote xx7vote xx4vote xx5vote xx3vote xx2vote xx1vote xx7getVoteResult
    样例输出:xx1 3xx2 2xx3 2xx4 2xx5 1xx6 02
  2.  

  3.  

  4. #include<iostream>
  5. #include<algorithm>
  6. #include<map>
  7. #include<string>

  8. usingnamespace std;
  9. typedef pair<string,int>MyPair;
  10. typedefmap<string,int>MyMap;
  11. map<string,int>::iterator iter;
  12. int main()
  13. {
  14.     int count= 0;
  15.     const string add= "addCandidate";
  16.     const string vote= "vote";
  17.     const string get= "getVoteResult";
  18.     string cmdf;
  19.     MyMap mymap;
  20.     while(cmdf != get)
  21.     {
  22.         string cmdn;
  23.         string str;
  24.         cout<< "请输入命令"<< endl;
  25.         cin>> cmdf;
  26.         if(cmdf != get)
  27.             cin>> cmdn;
  28.         if(cmdf == add)
  29.         {
  30.             str.clear();
  31.             for(int i= 0; i< cmdn.size(); i++)
  32.             {
  33.                 str.push_back(cmdn[i]);
  34.             }
  35.             mymap.insert(make_pair(str,0));
  36.         }
  37.         elseif (cmdf== vote)
  38.         {
  39.             str.clear();
  40.             for(int i= 0; i< cmdn.size(); i++)
  41.                 str.push_back(cmdn[i]);
  42.             iter= mymap.find(str);
  43.             if(iter != mymap.end())
  44.                 iter->second++;
  45.             else
  46.                 count++;
  47.         }
  48.     }
  49.     iter= mymap.begin();
  50.     while(iter != mymap.end())
  51.     {
  52.         cout << (*iter).first << " " << (*iter).second << endl;
  53.         iter++;
  54.     }
  55.     cout<< "输错次数:"<< count << endl;
  56.     return0;
  57. }
笨笨熊搬家交通篇
描述:

    森林里的苯苯熊要乔迁新喜,上次他已经将物品打包完成,并约了朋友来帮忙。接下来他要选定一个搬家的时间,想了很久,就决定在国庆节进行,因为国庆放假朋友们都有时间啦。但是在森林里,从他现在房子到新豪宅,所经之地有山有水,路途曲折,甚至有些道路是不通的。
    请你和他一起查看指定的地图,看看从笨笨熊现在的房子到新宅之间,道路是否是畅通的呢?
    地图是R行、C列的矩阵,矩阵的每一个格子刚好是一天的行程。
    矩阵由“B”、“-”、“#”、“H”四种字符成员组成,其中:
    B: 代表苯苯熊现在的房子;
    H: 代表笨笨熊新的豪宅;
    -: 代表可以通行的道路;
    #: 代表无法通过的障碍(高山、大河等);
    此外,森林里也有交通规则地:在任务位置,只能向“上、下、左、右”四个方向中的其中一个方向行走。

运行时间限制:无限制
内存限制:无限制
输入:

4  // R的数值
4  // C的数值,下面是地图。
--##---
B-----H
#---#--
-------

输出:

Y //代表道路可达
或 
N //代表道路不通

样例输入:15-B-H#
样例输出:Y
答案提示: 
  1. 这个题目开始想用回溯法做,用的时间较多,后来发现这种暴力破解法貌似更好,题目没有时间,内存的限制~
  2. #include<iostream>
  3. usingnamespace std;

  4. void old_Home(char**m,int x,int y,int& a,int& b)//获取B的坐标
  5. {
  6.     for(int i= 0; i< x; i++)
  7.     {
  8.         for(int j= 0; j< y; j++)
  9.         {
  10.             if(m[i][j]== 'B')
  11.             {
  12.                 a= i;
  13.                 b= j;
  14.            }
  15.         }
  16.     }
  17. }
  18. bool find_Home(char**m,int x,int y,int a,int b)
  19. {
  20.     if((a >= 0)&& (a< x)&& (b>= 0)&& (b< y))
  21.     {
  22.         if(m[a][b]== 'H')
  23.             returntrue;
  24.         if(m[a][b]== '#')
  25.             returnfalse;
  26.         if((m[a][b]== '-')|| (m[a][b]== 'B'))
  27.         {
  28.             m[a][b]= '#';
  29.             return(find_Home(m, x, y, a + 1, b)||
  30.             find_Home(m, x, y, a- 1, b)||
  31.             find_Home(m, x, y, a, b+ 1)||
  32.             find_Home(m, x, y, a, b- 1));
  33.         }
  34.     }
  35.     else
  36.         returnfalse;
  37. }    
  38. voidInit(char* p,int x,int y)//输入矩阵
  39. {
  40.     for(int i= 0; i< x ; i++)
  41.     {
  42.         cin>> p;
  43.         p+= y;
  44.     }
  45. }
  46. int _tmain(int argc, _TCHAR* argv[])
  47. {
  48.     int x, y,a = 0,b= 0;
  49.     cin>> x;
  50.     cin>> y;
  51.     char** m= newchar*[x];
  52.     char* p= newchar[x*y+1];
  53.     for(int i= 0; i< x; i++)
  54.     m[i]= p + i*y;
  55.     Init(p, x, y);
  56.     old_Home(m, x, y, a, b);
  57.     if(find_Home(m, x, y, a, b))
  58.         cout<< "Y"<< endl;
  59.     else
  60.         cout<< "N"<< endl;
  61.     delete[] p;
  62.     return0;
  63. }




3.
好友关系管理
描述:

现有一个社交网站,其好友推荐策略为:用户A和用户B不是好友,当二人的共同好友数量超过好友推荐阈值m时,就向AB分别推荐为彼此好友。 

本题任务为:对设定的m值,给定一组用户及各自好友列表,对这一组用户,反复自动应用上述好友推荐策略后(假设每次推荐都被采纳),求指定用户的最终好友列表。 

注:好友关系是双向的,即:如果用户A是用户B的好友,那么用户B一定也是用户A的好友。 

 

写一个程序,在社交网络中实现:

1)初始化社交网络 

2)创建用户 

3)增加指定两个用户之间的好友关系

4)反复自动应用好友推荐策略后,获取某个用户的好友数量 

5)反复自动应用好友推荐策略后,判断某两个用户间是否存在好友关系 

    

说明:

1、一个用户有且只有一个名字,且不存在重名 

2、自己和自己不存在好友关系 

3、用户名字大小写敏感 

4、用户名字字符串长度范围为[1..20]

5、用户总数小于100个

 

运行时间限制:无限制
内存限制:无限制
输入:

五个整数,好友推荐阈值P创建用户数量m,增加指定两个用户之间的好友关系数量M,查询某个用户的好友数量n,查询指定两个用户是否是好友N字符串,每个数据一行,按到上面的顺序依次输入数据,共m+M+n+N行字符串

字符串,每个一行,共m+M+n+N行字符串

 

输出:

输出用户的好友数量,共n个,每个一行;如果用户不存在,输出-1,否则输出好友数量。样例中的用户Jack、Peter、Tom的好友数量都是2个。

输出指定两个用户是否是好友,共N个,每个一行,如果是输出0,否则输出-1。样例中的用户Jack与Peter、Peter与Tom、Jack与Tom都是好友关系,所有输出0。

 

样例输入:2 3 3 3 3JackPeterTomJack PeterPeter TomJack TomJackPeterTomJack PeterPeter TomJack Tom
样例输出:222000
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值