给定任意一个正整数,求比这个数大且最小的“不重复数”
来源:互联网 发布:解答题目的软件 编辑:程序博客网 时间:2024/05/09 18:20
在整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”[2014百度笔试题]
有朋友提到如果输入1111111,效率非常低,确实是这样,诸如这样的还有10998765,,99876543,
这个建议提的非常好,现在把算法做了优化,欢迎好心朋友不吝赐教,一起探讨。
转自http://blog.csdn.net/wujunokay/article/details/12191043
分析:
对于111111,这样的,输出结果要求是不重复数,那自然前2为应该是12,而后面的就应该是0和1来填充,就不用循环取数来判断是不是不重复数了。基于这个思路实现如下:
实现代码如下(这里,我在原作者的代码里加了些注释,又因为gcc编译器不支持itoa()函数,所以改用sprintf()):
#include<stdio.h>#include<string.h>#include<stdlib.h>int GetMinAbove(int nNum){char Temp[20],OutTemp[20];int nLen = 0;int i = 0,j = 0,k = 0;int nTemp = 0,nCount = 0;//itoa(nNum,Temp,10);sprintf(Temp,"%d",nNum);nLen = strlen(Temp);//先看输入数字是不是循环数for(i = nNum;i < nLen -1;i++){//输入数字是循环数时//处理输入串里是重复数的情况if(Temp[i] == Temp[i+1]){if(0 == i){//998765类的数字时if(Temp[i] == '9'){strcpy(OutTemp,"10");for(j = 1;j < nLen;j++){OutTemp[j+1] = (j % 2) + '0';}}else{OutTemp[0] = Temp[i];OutTemp[1] = Temp[i] + 1;for(j = 2;j < nLen;j++){OutTemp[j] = (j%2) + '0';}}}else{//'9'不是在输入数字最高位for(k = 0;k < i;k++){OutTemp[k] = Temp[k];}//1099348if(Temp[i] == '9'){OutTemp[i-1] = Temp[i-1] + 1;if(i > 2){if(Temp[i-1] == Temp[i-2]){OutTemp[i-1] = Temp[i-1]+1; }}for(j=i;j<nLen;j++){OutTemp[j] = (nCount % 2)+'0';nCount ++;}}else{OutTemp[i] = Temp[i];OutTemp[i+1] = Temp[i+1] + 1;for(j = i+2;j < nLen;j++){OutTemp[j] = (nCount % 2) + '0';nCount ++;}}}return atoi(OutTemp);}}for( i = nNum +1;;i++){//itoa(nNum,Temp,10);//itoa(i,Temp,10); //注意,这里是i了sprintf(Temp,"%d",i);nLen = strlen(Temp);for(j = 0;j<nLen - 1;j++){if(Temp[j] == Temp[j+1]){//有重复break;}}if(j == nLen -1){//没有重复return i;}}return 0;}int main(int argc,char *argv[]){int nTemp = 0;int nRet = 0;while(1){scanf("%d",&nTemp);if(9999 == nTemp){break;}else{nRet = GetMinAbove(nTemp);printf("%d\n",nRet);}}return 0;}
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 程序设计题--给定任意一个正整数,求比这个数大且最小的“不重复数
- (百度笔试题)给定任意一个正整数,求比这个数大且最小的“不重复数”。
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”[2014百度笔试题]
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
- 给定任意一个正整数,求比这个数大且最小的不重复数,“不重复数”的含义是相邻两位不同(java写的)
- 求比给定正整数N的最小不重复数(度娘)
- 算法:求比指定数大且最小的“不重复数”问题的高效实现
- [经典面试题][百度]求比指定数大且最小的“不重复数”
- 给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。
- 2014百度研发真题及其解析-求比指定数大且最小的“不重复数”
- 给定任意一个整数,找出比当前这个数大的最小的10个素数之和。
- 给定一个数,要求输出比它大的最小的非重复数
- 百度面试题 求比N大的最小“不重复数”
- 给定一个正整数,找出一个数:与其二进制表示中1的个数相同,比该数大,而且最接近
- 给定一个数,求比它大的第一个对称数
- 给定一个数字,求比它大的最小的非重复数字
- 探究声卡之controls
- tar算法分析结论
- MFC——从实现角度分析微云界面
- 再论声卡之control
- 三探声卡值controls
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 简单查看oracle的连接情况和内存使用情况.
- 僵死进程
- 01背包问题优化
- java管道使用
- OCP-1Z0-052-V8.02-162题
- 2013-10-12.笔记001
- POJ 3342 Party at Hali-Bula(树形DP)
- “BUG: sleeping function called from invalid context at ......”(might_sleep函数说明)