腾讯面试题:
给你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次....
以此类推..
参考别人的,实现代码如下:
-
#include<iostream>
-
using namespace std;
-
#define len 10
-
-
class NumberTB
-
{
-
private:
-
int top[len];
-
int bottom[len];
-
bool success;
-
public:
-
NumberTB();
-
int *getBottom();
-
void setNextBottom();
-
int getFrequecy(int num);
-
};
-
-
NumberTB::NumberTB()
-
{
-
success=false;
-
for(int i=0;i<len;i++)
-
{
-
top[i]=i;
-
bottom[i]=0;
-
}
-
}
-
-
int * NumberTB::getBottom()
-
{
-
int i=0;
-
while(!success)
-
{
-
i++;
-
setNextBottom();
-
}
-
return bottom;
-
}
-
-
void NumberTB::setNextBottom()
-
{
-
bool reB=true;
-
for(int i=0;i<len;i++)
-
{
-
int frequecy=getFrequecy(i);
-
if(bottom[i]!=frequecy)
-
{
-
bottom[i]=frequecy;
-
reB=false;
-
}
-
}
-
success=reB;
-
}
-
-
//统计num在bottom[]数组中出现的次数
-
int NumberTB::getFrequecy(int num)
-
{
-
int count=0;
-
for(int i=0;i<len;i++)
-
{
-
if(bottom[i]==num)
-
count++;
-
}
-
return count;
-
}
-
-
int main()
-
{
-
NumberTB nTB;
-
int *result=nTB.getBottom();
-
for(int i=0;i<len;i++)
-
cout<<*result++<<" ";
-
cout<<endl;
-
return 0;
-
}
阅读(708) | 评论(0) | 转发(0) |