Chinaunix首页 | 论坛 | 博客
  • 博客访问: 541094
  • 博文数量: 129
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1888
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-20 11:09
文章分类

全部博文(129)

文章存档

2016年(1)

2015年(5)

2014年(64)

2013年(59)

我的朋友

分类: C/C++

2013-10-07 19:03:23

腾讯面试题:  
给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数  
要求下排每个数都是先前上排那十个数在下排出现的次数。  
上排的十个数如下:  
【0,1,2,3,4,5,6,7,8,9】

初看此题,貌似很难,10分钟过去了,可能有的人,题目都还没看懂。 

举一个例子,  
数值: 0,1,2,3,4,5,6,7,8,9  
分配: 6,2,1,0,0,0,1,0,0,0  
0在下排出现了6次,1在下排出现了2次,  
2在下排出现了1次,3在下排出现了0次....  
以此类推..   

参考别人的,实现代码如下:
 

  1. #include<iostream>
  2. using namespace std;
  3. #define len 10

  4. class NumberTB
  5. {
  6. private:
  7.     int top[len];
  8.     int bottom[len];
  9.     bool success;
  10. public:
  11.     NumberTB();
  12.     int *getBottom();
  13.     void setNextBottom();
  14.     int getFrequecy(int num);
  15. };

  16. NumberTB::NumberTB()
  17. {
  18.     success=false;
  19.     for(int i=0;i<len;i++)
  20.     {
  21.      top[i]=i;
  22.         bottom[i]=0;
  23.     }
  24. }

  25. int * NumberTB::getBottom()
  26. {
  27.     int i=0;
  28.     while(!success)
  29.     {
  30.      i++;
  31.      setNextBottom();    
  32.     }
  33.     return bottom;
  34. }

  35. void NumberTB::setNextBottom()
  36. {
  37.     bool reB=true;
  38.     for(int i=0;i<len;i++)
  39.     {
  40.      int frequecy=getFrequecy(i);
  41.      if(bottom[i]!=frequecy)
  42.      {
  43.         bottom[i]=frequecy;
  44.         reB=false;
  45.      }
  46.     }
  47.     success=reB;
  48. }

  49. //统计num在bottom[]数组中出现的次数
  50. int NumberTB::getFrequecy(int num)
  51. {
  52.     int count=0;
  53.     for(int i=0;i<len;i++)
  54.     {
  55.      if(bottom[i]==num)
  56.             count++;
  57.     }
  58.     return count;
  59. }

  60. int main()
  61. {
  62.     NumberTB nTB;
  63.     int *result=nTB.getBottom();
  64.     for(int i=0;i<len;i++)
  65.         cout<<*result++<<" ";
  66.     cout<<endl;
  67.     return 0;
  68. }





阅读(708) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~