6174問題:假設你有一個各位各不相同的四位數,把所有數字從小到大排序後得到啊、,從大到小排序後得到b,然後用a-b替換原來這個數,並且繼續操作。例如,從1234出發,以此可以得到4321-1234=3087、8730-387=8325、8532-2358=6174。有趣的是,7641-1467=6174,回到了它自己。
輸入一個n位數,輸出操作序列,直到出現循環(即新得到的數曾經得到過)。輸入保證在循環之前最多會產生的1000個整數。
樣例輸入:1234
樣例輸出:1234->3087->8352->6174->6174
#include
#include
#include
using namespace std;
bool compare(int a,int b){
return a>b; //降序排序
}
int get_next(int x){ //定義一個get_next函數用於得到下一個數
char s[10]; //數組開小會導致程序異常退出
int a,b;
sprintf(s,"%d",x);
int len=strlen(s);
sort(s,s+len,compare);
sscanf(s,"%d",&a); //使用sscanf函數把一個字符型數組中的數導入到整形變量中會自動去掉前導0
sort(s,s+len); //不加compare函數默認爲升序排序
sscanf(s,"%d",&b);
return a-b;
}
int main(){
int p[1000],count=1;
cin>>p[0];
cout<
"<
下面寫一下sort函數的基本用法:
C++的STL中有一個sort函數,時間複雜度爲N*log2(N),可以直接對數組排序,使用這個函數需要加上頭文件#include<algoritem>。
這個函數可以傳遞兩個或者三個參數,第一個參數是區間首地址,第二個參數是區間尾地址的下一個地址。也就是說,排序的區間是[a,b),簡單來說,有一個數組int a[100],你要從a[0]到a[99]的元素進行排序,只要寫sort(a,a+100)即可,默認的排序方式是升序排序。如果想要改變排序的順序,就要用到第三參數——比較函數。比較函數是一個自己定義的函數,返回值是bool類型,比如想把剛纔的數組按降序排序,可以先定義一個比較函數compare。
compare(int a,int b){
return a>b;
}
排序的時候就寫sort(a,a+100,compare);就可以實現降序排序了。