题目描述:给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。
思路:先对n加1,然后从最高位往后遍历,如果相邻两位相等(s[i]==s[i+1]),低位加1(s[i+1]++),如果需要进位就往前进位;然后把[s.begin()+i+2/3,s.end()),换成010101。2/3取决于进位有没有进到最高位(即增加一位)。最后一直到最后(while(i<s.size()-1))
// 求比指定数大且最小的“不重复数”
#include <stdio.h>
#include <string>
#include<iostream>
using namespace std;
int mygetRes(int n){
string s=to_string(n+1);
int i=0;
while(i<s.size()-1){
for(i=0;i<s.size()-1;i++){
if(s[i]==s[i+1]){
s[i+1]++;
int index=i+1;
while(index>=0&&s[index]>='9')
{
s[index]='0';
s[--index]++;
}
if(index<0) s.insert(s.begin(),'1');
for(int j=index<0?i+3:i+2;j<s.size();j++){
if(s[j-1]=='0') s[j]='1';
else s[j]='0';
}
break;
}
}
}
return atoi(s.c_str());
}
int main()
{
int n;
while(cin>>n){
cout<<mygetRes(n9999)<<endl;
}return 0;
}