給出任意一個正整數,算出大於它的最小不重複數——最高效[2014百度筆試題]
程序很簡單,一看就懂,我就不多介紹了,直接上代碼。
/** * 給出任意一個正整數,算出大於它的最小不重複數(即不存在相鄰兩個數相同的情況) */ #include<iostream> using namespace std; long minNoDoubleNumber(long x) { if(x < 10) { return x; } long y = 1; long temp = x; while(temp / 10 > 0) { y *= 10; temp /= 10; } y /= 10; int next = -1; bool hasPlus = false; while(y > 0) { next = (x / 10 / y) % 10; if((x / y) % 10 == next) { if(!hasPlus) { x += y; hasPlus = true; if(9 == next) { return minNoDoubleNumber(x); } } else { x -= y; if(0 == next) { return minNoDoubleNumber(x); } } } else { y /= 10; } } return x; } int main(void) { long x; cout<<"x="; cin>>x; cout<<"result="<<minNoDoubleNumber(x)<<endl; }
程序文件見:https://github.com/wenin819/wenin819/blob/master/src/number/min_no_double_number.cpp
最後更新:2017-04-03 14:54:25