关于腾讯这道数组面试题,这可能是最笨的解法
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循环来解决。这是我的思路:
- 观察上面数组,可以得出这么一个结论:下面数组是上面数组元素对应的出现次数,因为数组长度为10,所以下面的数组值的和必须等于10,同时下面的数组元素的值与上面数组对应元素的值的乘积要等于10
- 根据上一条件构建数组,使用循环语句采用排列组合方式来求得满足上述条件的数组的排列组合。
- 求得数组后再使用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"); }
输出结果:
感受
通过这个题目让自己感受到自己的不足,程序小白仍需继续努力!
相关文章推荐
- 6.(数组)腾讯面试题:
- 上两道js面试题,关于数组字符串 之间的转化
- 关于数组的面试题
- 关于数组的几道面试题
- 关于数组的几道面试题
- 一道腾讯的面试题,关于a和&a
- 【Golang】LeetCode-剑指Offer-面试题21-调整数组顺序使奇数位于偶数前面【两种解法】
- 关于javascript 数组的正态分布排序的一道面试题
- 关于旋转数组的三道面试题
- 关于项目经理的一些可能面试题
- Android 面试题 关于数组排序问题
- 关于jQuery.inArray(),字符串数组中不可能找到数字问题
- 关于数组的几道面试题
- 关于数组的算法面试题:找出数组中的重复元素,并且将数组排序。
- [转]关于数组的几道面试题
- 关于数组的几道面试题
- JavaScript关于闭包函数,有可能遇到的一个面试题&&&&&&
- 关于面试题中进制转换不用库函数解法
- 腾讯面试题之求数组前小后大划分元素
- 一道关于返回指针和返回数组名的面试题