(百度笔试题)给定任意一个正整数,求比这个数大且最小的“不重复数”。
来源:互联网 发布:医疗教育软件开发 编辑:程序博客网 时间:2024/05/20 16:33
给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,
例如1101是重复数,而1201是不重复数。
1、把整数放到字符数组里面去,从高位为低位(用变量i)扫描,找到重复的数位,重复数位为“99”跳到第2步,否则跳到第3步,若没有重复的数位,则该数为不重复数,返回;
2、遇到“99”的重复数,则把“99”改为“00”,然后在“99”前面一位字符加1,把扫描的地方定位在“99”往高位方向的第2位,比如是1299,变换后为1300,然后把扫描变量 i 定位在1这一数位上,返回第1步;
3、遇到非“99”的重复数,则直接在低位加1,后面依次变为010101……,结果就是最小的不重复数,返回该值;
#include <stdio.h>#include <stdlib.h>#include <string.h>#define SIZE 100int getNumNonrepetition(const char* NumGived, char NumStr[]){int len=strlen(NumGived); for(int i=0;i<len;i++){NumStr[i+1]=NumGived[i];} int flag = 0;//设置010101的时候用的变量 i=1; while( 1 ) { //定位到重复的位上面,下标i + 1为低位,此时NumStr[i] == NumStr[i + 1] while(i < len && NumStr[i] != NumStr[i + 1])i++; if(i == len) break;//扫完一遍,没有重复的,跳出循环,该数是不重复数 if(NumStr[i + 1] == '9')//重复的数位为99这种情况,将这两位全部置0,高位加1 { NumStr[i + 1] = '0'; i--; NumStr[i + 1] = '0'; i--; NumStr[i + 1] += 1; } else//重复的 { //低位加1 NumStr[i + 1] += 1; i += 2; //后续全部设为0101……,这个时候肯定是不重复数了,所以可以跳出循环 while( i < len+1 ) { NumStr[i] = flag % 2+ '0'; flag++; i++; } break; } } //打印最小的”不重复数“ //如果是99开头的数字,高位可能会进位,判断是否为零,不为零则有进位,需打印出来 if(NumStr[0] != '0') putchar(NumStr[0]); for(i = 1; i < len+1; i++ ) { putchar(NumStr[i]); }printf("\n"); return 0;}int main(void){ char a[20]; memset(a,'\0',20); gets(a); char NumStr[SIZE]; memset(NumStr, '0', SIZE * sizeof(char)); getNumNonrepetition(a, NumStr); return 0;}
0 0
- (百度笔试题)给定任意一个正整数,求比这个数大且最小的“不重复数”。
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”[2014百度笔试题]
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 程序设计题--给定任意一个正整数,求比这个数大且最小的“不重复数
- 给定任意一个正整数,求比这个数大且最小的不重复数,“不重复数”的含义是相邻两位不同(java写的)
- [经典面试题][百度]求比指定数大且最小的“不重复数”
- 2014百度研发真题及其解析-求比指定数大且最小的“不重复数”
- 求比给定正整数N的最小不重复数(度娘)
- 算法:求比指定数大且最小的“不重复数”问题的高效实现
- 给出任意一个正整数,算出大于它的最小不重复数——最高效[2014百度笔试题]
- 给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。
- 给定任意一个整数,找出比当前这个数大的最小的10个素数之和。
- 百度面试题 求比N大的最小“不重复数”
- 给定一个数,要求输出比它大的最小的非重复数
- 百度笔试题----最小不重复数
- 百度笔试题----最小不重复数
- 关于认知计算的一点浏览和摘录
- 分布式算法 1 同步网络的形式化描述
- html5学习历程
- JavaScript 语句标识符
- SQL Server 异常 COM 类公司中CLSID 为 {10021F00-E260-11CF-AE68-00AA004A34D5} 的组件时失败,原因是出现以下错误: 80040154
- (百度笔试题)给定任意一个正整数,求比这个数大且最小的“不重复数”。
- 多线程
- Spring注解
- radminpass.php
- 读写properties文件
- 序列化和反序列化
- UI_网络编程
- 方便测试的 adb 命令 集合
- leetcode-118 Pascal's Triangle