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);
}

 

posted on 2013-10-06 21:31  ybxnice  阅读(130)  评论(0)    收藏  举报