知識點:1.排序(冒泡法);
2.字符串逆轉(每次首尾交換,或者用一個等大的數組遍歷一次);
3.標記是否是重複數字(用10000+數組存儲出現的數字,數字爲下標,用1標記存在,或者用數字爲內容,但需要每次查找遍歷一次數組)
實現代碼:
#include <iostream>
#include <string.h>
#include <stdio.h>
#define MAX 10010
using namespace std;
int GetNext(int n);
int num[MAX];
int main()
{
memset(num,0,sizeof(num));
int n;
// cin >> n;
n = 1234;
cout << n;
while(num[n] == 0){
num[n] = 1;
n = GetNext(n);
cout << " -> " << n;
}
return 0;
}
int GetNext(int n)
{
char buf[10];
sprintf(buf,"%d",n);
//冒泡法排序
for(int i=1 ; i<4 ; i++){
for(int j=0 ; j<4-i ; j++){
if(buf[j] > buf[j+1]){
char temp = buf[j];
buf[j] = buf[j+1];
buf[j+1] = temp;
}
}
}
int a,b;
sscanf(buf,"%d",&a);
// char buf2[10];
// for(int i=0 ; i<4 ; i++){
// buf2[3-i] = buf[i];
// }
// sscanf(buf2,"%d",&b);
//每次首尾交換
for(int i=0 ; i<4/2 ;i++){
char temp = buf[i];
buf[i] = buf[3-i];
buf[3-i] = temp;
}
sscanf(buf,"%d",&b);
return b - a;
}