zoukankan      html  css  js  c++  java
  • OJ-2(数字处理)

    From baiduOJ

    title:给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。

    思路:(1)将原先的N进行+1,再进行“不重复”检测

         (2)从最高位开始,往低位扫描,一旦发现有重复的两位,相对较低的那位+1,其后面的位数全部变成010101……

             (3)经过(2)之后的一轮后,或许又会产生新的“重复的两位”,需要再次执行(2)过程进行循环扫描,直到没有发现“重复的两位”,跳出循环

             

    代码如下:

    #include <stdio.h>
    #include <math.h>
    
    //取出一个数N的第i位(N的个位为第1位)
    int getElem(int data, double i) {
    
        int res;
    
        if(i == 1)  res = data%10;
        if(i > 1)   res = (data/(int)pow(10.0,(i-1)))%10;
    
        return res;
    }
    
    //设定一个数N的第i位为newNum,注意newNum只能是0~9
    void setElem(int *pdata, double i, int newNum) {
    
            *pdata += (int)pow(10.0,(i-1))*(newNum-getElem(*pdata,i));
    }
    
    //计算出一个整数的位数(个位/十位/百位……)
    

    int getBitNum(int data) {

    
    

    int bitNum = 0;

    
    

    while(data) {
      bitNum++;
      data /= 10;
    }

    
    

    return bitNum;

    
    

    }

    //程序入口
    int main()
    {
        long int N = 99921; 
        long int data = N + 1;
    
        double i;
    
        int flagLoop = 1;
    
        int j;
    
        while(flagLoop) {
            flagLoop = 0;
            //2位以上的数的处理
            for (i = getBitNum(data); i >= 2; i--) {
    
                    if(getElem(data,i)==getElem(data,i-1)) {
    
                        flag = 1;
                        flagLoop = 1;
                        
                        setElem(&data,i-1,getElem(data,(i-1))+1);
                        //后面的位数变成010……依次交替
                        for (j = i-2; j >= 1; j -= 2) {
    
                            setElem(&data,j,0);
                        }
    
                        for (j = i-3; j >= 1; j -= 2) {
                            setElem(&data,j,1);
                        }
                        
                    }
    
            }
    
        }
        
    
        
    
        printf("%ld",data);
    
        return 0;
    }
  • 相关阅读:
    vant框架的select下拉框
    监听滚轴高度
    关于使用iframe的父子页面进行简单的相互传值
    vue监听移动端物理返回
    vue+ElementUI项目中,input只能输入正整数的验证
    移动端公共样式
    协程嵌套协程
    基础知识
    汉化包
    .ui转.py文件命令
  • 原文地址:https://www.cnblogs.com/hushunfeng/p/3956854.html
Copyright © 2011-2022 走看看