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

关于腾讯这道数组面试题,这可能是最笨的解法

2020-06-23 09:31 120 查看

题目

给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数要求下排每个数都是先前上排那十个数在下排出现的次数。上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】
举一个例子,
数值: 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次….
以此类推…

解答

对于一个程序新手的我来说,目前就只学了c语言的基础。这道题我第一能想到的就是通过for循环来解决。这是我的思路:

  1. 观察上面数组,可以得出这么一个结论:下面数组是上面数组元素对应的出现次数,因为数组长度为10,所以下面的数组值的和必须等于10,同时下面的数组元素的值与上面数组对应元素的值的乘积要等于10
  2. 根据上一条件构建数组,使用循环语句采用排列组合方式来求得满足上述条件的数组的排列组合。
  3. 求得数组后再使用case语句获得下面数组每个数字出现的个数,如果符合条件,就输出该数组;

实现

#include<stdio.h>
int main(){
int t[9]={0,1,2,3,4,5,6,7,8,9};
int r[9]={0,0,0,0,0,0,0,0,0,0};
int a,b,c,d,e,f,g,h,i,j,n=0,rs=0,ln=0,ch;
for (a=0;a<9;a++)
{// 采用循环的方式来求得后面数组的排列组合
r[0]=9-a;
for(b=0;b<=(10-r[0]);b++){
r[1]=10-r[0]-b;
for(c=0;c<=(10-r[0]-r[1]);c++){
r[2]=10-r[0]-r[1]-c;
for(d=0;d<=(10-r[0]-r[1]-r[2]);d++){
r[3]=10-r[0]-r[1]-r[2]-d;
for(e=0;e<=(10-r[0]-r[1]-r[2]-r[3]);e++){
r[4]=10-r[0]-r[1]-r[2]-r[3]-e;
for(f=0;f<=(10-r[0]-r[1]-r[2]-r[3]-r[4]);f++){
r[5]=10-r[0]-r[1]-r[2]-r[3]-r[4]-f;
for(g=0;g<=(10-r[0]-r[1]-r[2]-r[3]-r[4]-r[5]);g++){
r[6]=10-r[0]-r[1]-r[2]-r[3]-r[4]-r[5]-g;
for(h=0;h<=(10-r[0]-r[1]-r[2]-r[3]-r[4]-r[5]-r[6]);h++){
r[7]=10-r[0]-r[1]-r[2]-r[3]-r[4]-r[5]-r[6]-h;
for(i=0;i<=(10-r[0]-r[1]-r[2]-r[3]-r[4]-r[5]-r[6]-r[7]);i++){
r[8]=10-r[0]-r[1]-r[2]-r[3]-r[4]-r[5]-r[6]-r[7]-i;
for(j=0;j<=(10-r[0]-r[1]-r[2]-r[3]-r[4]-r[5]-r[6]-r[7]-r[8]);j++){
r[9]=10-r[0]-r[1]-r[2]-r[3]-r[4]-r[5]-r[6]-r[7]-r[8]-j;
rs=r[0]*t[0]+r[1]*t[1]+r[2]*t[2]+r[3]*t[3]+r[4]*t[4]+r[5]*t[5]+r[6]*t[6]+r[7]*t[7]+r[8]*t[8]+r[9]*t[9]+r[9]*t[9];//检验是否满足条件上面数组与下面数组对应元素乘积等于10
if(rs==10){
int a1=0,b1=0,c1=0,d1=0,e1=0,f1=0,g1=0,h1=0,i1=0,j1=0;
for(ch=0;ch<10;ch++)
{//统计下面元素出现的次数
if(r[ch]==0) a1++;
else if(r[ch]==1) b1++;
else if(r[ch]==2) c1++;
else if(r[ch]==3) d1++;
else if(r[ch]==4) e1++;
else if(r[ch]==5) f1++;
else if(r[ch]==6) g1++;
else if(r[ch]==7) h1++;
else if(r[ch]==8) i1++;
else if(r[ch]==9) j1++;
}

if(r[0]==a1 && r[1]==b1&& r[2]==c1&& r[3]==d1&& r[4]==e1&& r[5]==f1&& r[6]==g1&& r[7]==h1&& r[8]==i1)
{
for(n=0;n<10;n++){
printf("%d\t",r[n]);
}
ln=1;

}
}
}
}
}
}
}
}
}
}
}
}
printf("\n succecess\n");
}

输出结果:

感受

通过这个题目让自己感受到自己的不足,程序小白仍需继续努力!

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