6174問題與sort函數

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);就可以實現降序排序了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章