您的位置:首页 > 职场人生

一道腾讯面试题

2012-05-19 22:26 197 查看
腾讯面试题:

给你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次....

以此类推..

// 引用自July 2010年10月18日。
//数值: 0,1,2,3,4,5,6,7,8,9

//分配: 6,2,1,0,0,0,1,0,0,0

可以这么做:初始化为0 0 0 0 0 0 0 0 0 0

第一次迭代:10 0 0 0 0 0 0 0 0 0

第二次迭代:9 0 0 0 0 0 0 0 0 1

第三次迭代:8 1 0 0 0 0 0 0 1 0

第四次迭代:7 2 1 0 0 0 0 1 0 0

第五次迭代:6 2 1 0 0 0 1 0 0 0

第六次迭代:6 2 1 0 0 0 1 0 0 0

结束...这里要注意只有一个数组A,开始初始化为全0,当计算第一个元素的值时,马上更新数组A,计算第二个元素的时候从头扫描这个更新后的数组A,得到A[1],马上更新数组..如此迭代下去,直至不变。

现贴上程序
#include <iostream>

using namespace std;

int main()

{

int A[]={0,1,2,3,4,5,6,7,8,9,10};

int B[11]={0};

int i,j,x,flag = 1;

while(flag)

{

flag = 0;

for(i=0;i<11;i++)

{

x=0;

for(j=0;j<11;j++)

{

if(A[i]==B[j])

{

x++;

}

}

if(B[i]!=x)

{

B[i]=x;

flag=1;

}

}

}

for(i=0;i<11;i++)

{

cout<<B[i]<<" ";

}

cout<<endl;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: