您的位置:首页 > 职场人生

百度面试题 求比N大的最小“不重复数”

2015-08-25 17:59 369 查看
给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11时相等的两个相邻位,而12301是不重复数。

#include<iostream>

using namespace std;

void Calculate(int a)

{

int pa = a;

int count = 0;

int b[20] = {0};

//将pa按位存储到数组b

while(pa > 0)

{

b[count++] = pa%10;

pa = pa/10;

}

bool flag = true; //是否有重复数

bool carryFlag = false; //是否产生进位

//从高位开始判断是否有重复数

int i,j,k;

count--;

for(i=count;i>0;i--)

{

if(b[i] == b[i-1])

{

flag = false;

b[i-1]++; //有可能产生进位

if(b[i-1]>9)

carryFlag = true;

break;

}

}

if(!flag) //如果存在重复位

{

int c = 0;

//将低位重复数后面的数都变成0101....

for(j = i-1;j>0;j--)

{

b[j-1] = c;

c = (c == 0 ? 1:0);

}

//处理进位

if(carryFlag)

{

int carry = 0;

for(j = i-1;j<=count + 1;j++)

{

b[j] = b[j] + carry;

if(b[j] >= 10)

{

carry = 1;

b[j] = b[j] - 10;

}

}

}

pa = 0;

for(i = (count=1 ? count + 1:count);i >=0;i--)

{

pa = pa *10 + b[i];

}

cout<<"the min no repeat number: "<<pa<<endl;

}

else

{

cout<<"the min no repeat number: "<<a<<endl;

return;

}

}

int main()

{

int N = 100002;

cout<<"N为:"<<N<<endl;

Calculate(N+1);

return 0;

}

运行结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: