一道腾讯面试题
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;
}
给你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;
}
相关文章推荐