C語言 數字黑洞

2021-09-07 10:20:34 字數 1340 閱讀 8094

演算法提高 數字黑洞  

時間限制:1.0s   記憶體限制:256.0mb

問題描述

任意乙個四位數,只要它們各個位上的數字是不全相同的,就有這樣的規律:

1)將組成該四位數的四個數字由大到小排列,形成由這四個數字構成的最大的四位數;

2)將組成該四位數的四個數字由小到大排列,形成由這四個數字構成的最小的四位數(如果四個數中含有0,則得到的數不足四位);

3)求兩個數的差,得到乙個新的四位數(高位零保留)。

重複以上過程,最後一定會得到的結果是6174。

比如:4312 3087 8352 6174,經過三次變換,得到6174

輸入格式

乙個四位整數,輸入保證四位數字不全相同

輸出格式

乙個整數,表示這個數字經過多少次變換能得到6174

樣例輸入

4312

樣例輸出 3

目的明確,題意很清晰的。

1 #include2 #include

3 #include4

int ans=0;5

void sheng(int

a)13}14

}15}16

void jiang(int

a)24}25

}26}27

int tomax(int

num);

29 a[0] = num/1000%10;//

千位 30 a[1] = num/100%10;//

百位 31 a[2] = num/10%10;//

十位 32 a[3] = num%10;//

個位 33

jiang(a) ;

34return a[0]*1000+a[1]*100+a[2]*10+a[3

];35}36

int tomin(int

num);

38 a[0] = num/1000%10;//

千位 39 a[1] = num/100%10;//

百位 40 a[2] = num/10%10;//

十位 41 a[3] = num%10;//

個位 42

sheng(a) ;

43return a[0]*1000+a[1]*100+a[2]*10+a[3

];44}45

void dfs(int

num)

49 num=tomax(num)-tomin(num);

50 ans++;

51dfs(num);52}

53int

main()

C語言程式設計 1019 數字黑洞

四個測試點錯誤,找不出。第二個測試點,關於輸入為6174,需要執行一遍再結束。第三四個測試點,如果輸入的為1000,第一次相減得1,需要補全四位才行,所以大部分用字串和數值相互轉化的思路在做。include include using namespace std intmain shengxu 0,...

PAT乙級 1019 數字黑洞 C語言

題目 給定任乙個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然後用第1個數字減第2個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的6174,這個神奇的數字也叫kaprekar常數。例如,我們從6767開始,將得到 7766 6677...

PAT B 1019 數字黑洞(C語言)

給定任乙個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的 6174,這個神奇的數字也叫 kaprekar 常數。例如,我們從6767開始,將得到 7...