博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(笔试题)最小的非“重复的数”
阅读量:7241 次
发布时间:2019-06-29

本文共 1398 字,大约阅读时间需要 4 分钟。

题目:

给一个定义:对一个整数,若其中存在相邻两位上的数字相同,则称其为“重复的数”;现给定一个正整数n,求不小于n的最小的非“重复的数”。

思路:

假设输入的数为n,则令m=n,

分别取m的最低两位数字a,b,

判断是否a==b,如果是说明是重复的数,那么递归调用n=m+1;考虑特殊情况,ab=99,产生进位后100仍未重复数,此时应该递归调用n=m+2;

如果a!=b,则往前挪一位,即m=m/10,直至m/10=0为止,最后返回n。

该思路也可以通过非递归来实现,详见代码。

代码:

#include 
using namespace std;int calNonRepetitionNum(int n){ if(n<10) return n+1; int a,b; int base=1; int m=n; while(m/10) { b=m%10; a=m/10%10; base*=10; if(a==b) { if(a==9) return calNonRepetitionNum((m+2)*base/10); else return calNonRepetitionNum((m+1)*base/10); } m/=10; } return n;}int calNonRepetitionNum_2(int n){ if(n<10) return n+1; int a,b,m; int base; bool flag=true; while(flag){ flag=false; m=n; base=1; while(m/10){ a=m%10; b=m/10%10; base*=10; if(a==b){ if(a==9){ n=(m+2)*base/10; flag=true; break; } else{ n=(m+1)*base/10; flag=true; break; } } m=m/10; } } return n;}int main(){ cout << calNonRepetitionNum(99) << endl; cout << calNonRepetitionNum_2(88) << endl; return 0;}

  

转载地址:http://anybm.baihongyu.com/

你可能感兴趣的文章
常见文件格式的文件头
查看>>
详测 Generics Collections TDictionary(4): OnKeyNotify、OnValueNotify
查看>>
操作 Wave 文件(8): 使用 TMediaPlayer 录制 wav 文件
查看>>
数据库菜鸟系列
查看>>
GdiPlus[39]: IGPGraphicsPath (六) - 路径的辅助工具 IGPGraphicsPathIterator
查看>>
SysUtils.StrAlloc、SysUtils.StrBufSize
查看>>
DELL1320笔记本BIOS升级
查看>>
系统的融合变化感想
查看>>
我的友情链接
查看>>
轻量级开源博客兼CMS系统LBlog发布
查看>>
天气预报的城市三级滚轮的城市表
查看>>
SqlServer2005连接Oracle方法
查看>>
C函数的调用过程 栈帧
查看>>
为什么Maven会更改Eclipse JDK设置
查看>>
疯狂java学习笔记1113---List接口
查看>>
wdlinux centos 7 gearman安装
查看>>
委托delegate
查看>>
Tomcat, Jre 证书相关
查看>>
Magento EasyTabs
查看>>
EDM邮件群发如何高效获取邮件列表?
查看>>