zoukankan      html  css  js  c++  java
  • 百度2014校招-深圳-开发测试-求最小“不重复数”

    给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如:1101是重复数,1231是不重复数

    思路:

    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");
    }
  • 相关阅读:
    golang zip 压缩,解压(含目录文件)
    c3p0参数详解
    golang协程——通道channel阻塞
    乔恩与加菲猫引发的思考
    部署bugzilla(bugzilla+apache+mysql+linux)
    新的篇章
    SQL基础2
    SQL基础1
    引用
    const 对象默认为文件的局部变量
  • 原文地址:https://www.cnblogs.com/yihua/p/3366000.html
Copyright © 2011-2022 走看看