百度2014校招-深圳-开发测试-求最小“不重复数”
2013-10-12 22:06
543 查看
给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如:1101是重复数,1231是不重复数
思路:
1、前把这个正整数加1,保证求得的数比这个数大
2、从左到右开始遍历加1后的正整数,如果前一个数字与后一个数字相同,则后一个数字需要加1
3、如果后一个数字为9的话,加1会进位,这时可能会引起前面已检测过的值产生重复,此时,需要重新遍历
4、加1后,为保证值最小,则后面数值以10101010...填充
代码:
思路:
1、前把这个正整数加1,保证求得的数比这个数大
2、从左到右开始遍历加1后的正整数,如果前一个数字与后一个数字相同,则后一个数字需要加1
3、如果后一个数字为9的话,加1会进位,这时可能会引起前面已检测过的值产生重复,此时,需要重新遍历
4、加1后,为保证值最小,则后面数值以10101010...填充
代码:
//方法一,直接+1判断是否符合 //但如11011011011时,效率太低 int GetMin(int a){ int k,l; while(1){ k=++a; l=k%10; k/=10; while(k){ if(l==k%10){ break; }else{ l=k%10; k/=10; } } if(k==0)return a; } } //方法二,也就是本文所写的思路 //直接观察数的各个数字规律求解 int GetMin2(int a){ int tri=1; int front,back; for(int i=a;i>10;i/=10)tri*=10; while(tri>1){ front=a/tri%10; back=a/(tri/10)%10; if(front==back){ a+=tri/10;//后一个数字加1 tri/=10; a/=tri;//后面的数字先以0填充 a*=tri; if(front!=a/(tri*10)%10)return GetMin2(a);//产生进位,需要重新检验前面的值 } tri/=10; } return a; } void main(){ cout<<GetMin2(989899)<<endl; cout<<GetMin(989898); system("pause"); }
相关文章推荐
- 实现返回大于A的最小“不重复数” 百度2014校招笔试题
- 2014 阿里巴巴 校招 测试开发工程师 笔试题
- 百度2014校招 深圳软件研发岗
- 2014百度开发测试笔试题
- 2012百度校招测试开发笔试
- 2014百度笔试题回忆(开发测试工程师)
- 求一棵树的面积,2014百度开发测试笔试题
- 2014百度面试题目---“求比指定整数大且最小的不重复数”解答
- 2014百度校招开发测试工程师笔试题(时间_2013-9-28__地点_深圳__职位_开发测试工程师)
- 百度笔试题——开发测试工程师(深圳)
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
- 2014百度研发真题及其解析-求比指定数大且最小的“不重复数”
- 百度2014开发测试工程师笔试题(沈阳站)
- 百度测试开发校招面试
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”[2014百度笔试题]
- 给出任意一个正整数,算出大于它的最小不重复数——最高效[2014百度笔试题]
- 百度面试——开发测试工程师(深圳)
- 百度2014校招一道笔试题
- 【2014校招】百度面试