/*
如果一个数字十进制表达时,不存在连续两位数字相等,
则称之为“不重复数”。例如,105,1234和12121都是“不重复数”,而11,100和 1225不算。
给定一个long类型数字A,返回大于A的最小“不重复数”。
*/
#include <iostream>
using namespace std;
typedef unsigned long long ULL;
ULL function(ULL num)
{
int tag[20];
int result[20];
int len=0;
num++;
do {
tag[len++]=num%10;
} while ( num/=10 );
int i=0,j=len-1;
result[i++]=0;
do {
result[i++]=tag[j--];
} while ( j>=0 && result[i-1]!=tag[j] );
if ( j>=0 ){
result[i]=result[i-1]+1;
}
while ( result[i]==10 ){
result[--i]++;
if ( i>0 && result[i]==result[i-1] ){
result[i]++;
}
}
while ( ++i<=len ){
result[i]=!result[i-1];
}
num=0;
for ( int k=0; k<=len ;++k){
num=num*10+result[k];
}
return num;
}
int main()
{
ULL m;
while ( true ){
cin>>m;
if ( m==500 ){
break;
}
cout<<function(m);
cout<<endl;
}
return 0;
}
求最小不重复数,源于百度2014届校园招聘软件研发岗位深圳站
最新推荐文章于 2022-11-28 15:26:29 发布