给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数
2014-02-15 22:55
309 查看
腾讯面试题:
给你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 次....
以此类推..
刚看到这道题,感觉第二排安排数字位置的影响因素颇多,无从下手,比如,如果下一排全是0,则0位置就不能为0,应该为10,因为有10个0,0变成了10,那么就剩下9个0了,所以0位置是9,9出现了,那9位置须为1,0的次数就变为了8,那9就没了,。。。。。。啊啊好烦
解题过程:
1、上一排的位置数组为pre={0,1,2,3,4,5,6,7,8,9},下一排数组nxt先赋值为0
2、遍历pre数组,pre[0]=0,从nxt数组中找出0出现的次数10,因为nxt[0]为0而不为10,所以此位置不对,先将10==nxt[0],
pre[1]=1,从nxt数组中找出1出现的次数0,因为nxt[1]为0等于0,所以此位置不动,继续。。。。。
遍历玩pre数组后,nxt={10,0,0,0,0,0,0,0,0,0}
3、循环2,知道所有位置的元素都一一对应结束,详细过程如下:
(1)从nxt找出0出现的次数为9,因nxt[0]=10,所以nxt[0]=9,nxt[9]=1,此时nxt={9,0,0,0,0,0,0,0,1}
(2)找出0出现的次数8,变动的数组为nxt[0]=8,nxt[1]=1,nxt[8]=1,因为nxt[9]=1不为0,所以nxt[9]=0,此时nxt={8,1,0,0,0,0,0,0,1,0}
(3)变动的数组为nxt[0]=7,nxt[1]=2,nxt[2]=1,nxt[7]=1,nxt[8]=0nxt={7,2,1,0,0,0,0,1,0,0}
(4)变动的数组为nxt[0]=6,nxt[6]=1,nxt[7]=0,nxt={6,2,1,0,0,0,1,0,0,0}
(5)检测到所有元素位置已就绪,退出循环
给你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 次....
以此类推..
刚看到这道题,感觉第二排安排数字位置的影响因素颇多,无从下手,比如,如果下一排全是0,则0位置就不能为0,应该为10,因为有10个0,0变成了10,那么就剩下9个0了,所以0位置是9,9出现了,那9位置须为1,0的次数就变为了8,那9就没了,。。。。。。啊啊好烦
解题过程:
1、上一排的位置数组为pre={0,1,2,3,4,5,6,7,8,9},下一排数组nxt先赋值为0
2、遍历pre数组,pre[0]=0,从nxt数组中找出0出现的次数10,因为nxt[0]为0而不为10,所以此位置不对,先将10==nxt[0],
pre[1]=1,从nxt数组中找出1出现的次数0,因为nxt[1]为0等于0,所以此位置不动,继续。。。。。
遍历玩pre数组后,nxt={10,0,0,0,0,0,0,0,0,0}
3、循环2,知道所有位置的元素都一一对应结束,详细过程如下:
(1)从nxt找出0出现的次数为9,因nxt[0]=10,所以nxt[0]=9,nxt[9]=1,此时nxt={9,0,0,0,0,0,0,0,1}
(2)找出0出现的次数8,变动的数组为nxt[0]=8,nxt[1]=1,nxt[8]=1,因为nxt[9]=1不为0,所以nxt[9]=0,此时nxt={8,1,0,0,0,0,0,0,1,0}
(3)变动的数组为nxt[0]=7,nxt[1]=2,nxt[2]=1,nxt[7]=1,nxt[8]=0nxt={7,2,1,0,0,0,0,1,0,0}
(4)变动的数组为nxt[0]=6,nxt[6]=1,nxt[7]=0,nxt={6,2,1,0,0,0,1,0,0,0}
(5)检测到所有元素位置已就绪,退出循环
#include "iostream" #include <algorithm> #include <functional> using namespace std; #define LEN 10 int pre[LEN]={0,1,2,3,4,5,6,7,8,9};//上一排的数 int nxt[LEN]={0};//下一排的数 //某数在下一排出现的次数 int getCount(int k) { int cnt=0; for(int i=0;i<LEN;i++) if (nxt[i]==k)cnt++; return cnt; } //根据上一排的情况生成下一排 void run(){ bool found=false;//标记是否找到解 while(!found){ found=true; for(int i=0;i<LEN;++i){ int cnt=getCount(pre[i]); if(nxt[i]!=cnt){ nxt[i]=cnt; found=false; } } for(int i=0;i<LEN;i++){ cout<<nxt[i]<<" "; } cout<<endl; } } void main() { run(); }
相关文章推荐
- 使用multipart请求处理文件上传
- struts2 的文件上传
- listview快速滑动是图片跳动的问题
- ubuntu 下code blocks 安装全过程 && codeblocks 快捷键 && 解决调试终端不能粘贴问题
- java学习之 io编程(文件编程)
- USACO 1.1 Greedy Gift Givers (gift1)
- POJ训练计划3278_Catch That Cow/SDUT2782_我跳我跳我跳跳跳(一维BFS)
- SimpleDateFormat使用详解
- Android 四种启动模式(Launch Mode) 最直观详解
- 利用SimpleDateFormat将String转换为格式化的日期
- WinCE之路:3.串口的基本操作,算是一个最简单的调试软件吧
- T-SQL中找出一个表的所有外键关联表
- 利用多种推广方式 力争最大推广效果
- NVelocity其它使用注意
- [CSS] 当多个CSS文件对同一个元素属性进行设置,会发生什么?
- 将博客搬至CSDN
- HDOJ3784 继续xxx定律
- 微软面试100题---将 二叉搜索树 转化成 有序的双向链表
- 浅谈iPhone OS(iOS)架构
- java之SequenceInputStream