http://www.cnblogs.com/pmer/p/3351466.html#!comments
问题:
给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如1101是重复数,而1201是不重复数。
——引自 百度2014校招笔试题目题解
我的思路给定n,m=n+1;
不用数组存储m,比较小的整数都可以如下几行代码处理:
#include <stdio.h> void main() { int n,m,l,i,k,front,follow,s; scanf("%d",&n); m=n+1; l=1; while(m/=10) //计算m的位数 l++; m=n+1; i=l; while(i>1) { k=i;s=1; while(--k)s*=10; front=(m/s)%10; follow=m/(s/10)%10; if(front==follow) //重复了就在follow处+1 { m=m+s/10; if(follow==9) //如果发生进位就从头接着来,虽然可能m的位数加1了, i=l; //但那一定是"x0...",x!=0,所以l不必考虑+1 } else i--; } printf("%d\n",m); }
浙公网安备 33010602011771号