“不重复数”问题
来源:互联网 发布:淘宝自我介绍72字范本 编辑:程序博客网 时间:2024/05/21 19:46
1、如果一个数字十进制表达时,不存在连续两位相同,则称之为“不重复数”。例如,105、1234、12121都是不重复数,而11、100、1225不是。给定一个正整数A,返回大于A的最小不重复数。A小于100000.
示例:输入:value =21099 返回:21201
本题的难点不在于判断是否是不重复数,而在于输出大于A的最小不重复数。
特别考虑集中情况:1、99、999、9999等
2、199、299、399等
基本思想:通过递归循环判断是不是“不重复数”,若是,则相同的部分低位加1,再循环判断,最后输出大于A的最小不重复数;若不是,则直接输出。
void fun(int a[],int size){ //使用递归实现Q5调用的 int i,j,N=0,c=1; //c用在数组元素转换为整数位数,c分别为1,10,100,1000等。 int flag=0; for(j=size-1;j>=0;j--){ //注意从高位到低位比较,若从低位开始则1000出现错误为1012非1010 if(a[j]==a[j-1]){ if(a[j-1]<9){ //排除含有199、299等情况 flag=1; a[j-1]++; fun(a,size); } else { //单独考虑199、299等情况 flag=1; a[j-1]=0; a[j]=a[j-1]; a[j+1]+=1; fun(a,size); } } } if(flag==0){ i=0; while(i<size){ N+=a[i++]*c; c*=10; } printf("%d\n",N); }}void Q5(){ int N,M; //N为输入整数、M为特殊情况下 while(scanf("%d",&N)!=EOF){ int a[10],b[10]; int size1=0,size2=0; //size1,size2分别为N、M位数 M=N+1; //判断是否为99、999、9999等类型 while(N){ a[size1++]=N%10; N/=10; } while(M){ b[size2++]=M%10; M/=10; } if(size1==size2){ fun(a,size1); } else fun(b,size2); }}int main(){ //Q1(); //共吃了9天 //Q2(); //兔子生崽问题 //Q3(); //质数分解问题 //Q4(); //输出次数和顺序号 Q5(); //输出“不重复数”注意考虑周全}
其他问题见下载资源我的2017年武大复试上机
1 0
- “不重复数”问题
- 不重复数
- 不重复数
- 不重复数
- 不重复数
- 随机选数 不重复
- 随机生成不重复数
- 求最小不重复数
- 不重复随机生成数
- 不重复地输出数
- 不重复随机数问题
- 不重复ip问题
- 算法:求比指定数大且最小的“不重复数”问题的高效实现
- 一种生成不重复数的算法
- 一种生成不重复数的算法
- 一种生成不重复数的算法
- 绝对值后不重复的数个数
- JAVA随即生成不重复的数
- 实现网页中常见的瀑布流原理
- 九宫格_蓝桥杯
- Linq系列—委托
- c++进制转化及输出精度问题总结
- BZOJ P4808 马
- “不重复数”问题
- lightoj-1014【枚举】
- Web安全性以及config对象
- 编辑距离(动态规划经典)
- 面试题this的指向整理
- RecycleView加载不同条目
- 基础练习 Sine之舞
- __str__ returned non-string (type int)
- Leetcode-114. Flatten Binary Tree to Linked List