1019 數字黑洞 20

2021-08-10 10:24:09 字數 2478 閱讀 4223

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

例如,我們從6767開始,將得到

7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

7641 - 1467 = 6174

… …現給定任意4位正整數,請編寫程式演示到達黑洞的過程。

輸入格式:

輸入給出乙個(0, 10000)區間內的正整數n。

輸出格式:

如果n的4位數字全相等,則在一行內輸出「n - n = 0000」;否則將計算的每一步在一行內輸出,直到6174作為差出現,輸出格式見樣例。注意每個數字按4位數格式輸出。

輸入樣例1:

輸出樣例1:

7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

輸入樣例2:

輸出樣例2:

2222 - 2222 = 0000

理解:這道題目看起來很簡單,但有很多小的出錯點,很多小點需要注意

1.題目格式要求很嚴格,輸出必須按照給定格式進行輸出,這就需要考慮當輸入是6147的時候,如果不執行一次直接結束格式就會出錯,所以這個地方就得使用do while結構先執行一次再進行判斷。

2.還是輸出的問題,當輸出有0時並且0在不是零位上必須填充0,要使用%0nd結構,不能使用%.nd有的判斷出錯。

注意:這是一道小題,要避免小題大做,不要光使用函式,那樣會加大時間,盡可能使用簡單方式,比如剛開始的判斷資料是否全部相等的部分,根本不用判斷,直接在後面判斷就行,排序也只排一次用不同順序就行,也不必要呼叫pow函式,直接就能簡單解決。

第一次小題大做執行超時

#include 

#include

//1代表從小到大排序,0代表從大到小排序

void sort(int

*p, int n, int sign) }}

}else}}

}}int decrease(int n) ;

int i = 0;

while (n > 0)

sort(arr, i , 1);

intlength = i;

i = 0;

int sum = 0, add;

while (ireturn sum;

}int increase(int n) ;

int i = 0;

while (n > 0)

sort(arr, i, 0);

intlength = i;

i = 0;

int sum = 0, add;

while (ireturn sum;

}int isequal(int n)

int main()

int result = n;

int first;

int two;

dowhile (result != 6174);

return

0;}

更改後的**

#include 

#include

//1代表從小到大排序,0代表從大到小排序

void sort(int *p, int n, int sign) }}

}else}}

}}int decrease(int n) ;

int i = 3;

arr[0] = n % 10;

arr[1] = n / 10 % 10;

arr[2] = n / 100 % 10;

arr[3] = n / 1000;

sort(arr, 4 , 1);

intsum = 0;

for (; i >= 0; i--)

return

sum;

}int increase(int n) ;

int i = 3;

arr[0] = n % 10;

arr[1] = n / 10 % 10;

arr[2] = n / 100 % 10;

arr[3] = n / 1000;

sort(arr, 4, 0);

intsum = 0;

for (; i >=0; i--)

return

sum;

}int main() while (result != 6174 && result != 0);

return

0;}

在多次使用函式的時候就用該考慮到時間的問題,操作不複雜的能簡單就簡單

1019 數字黑洞 20

pat1019 include include include include using namespace std void vector2i vector v,int sum vector轉整型 v.resize 4,0 若不滿4位,則繼續補0 reverse v.begin v.end 反轉...

1019 數字黑洞 20

時間限制 100 ms 記憶體限制 32000 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 給定任乙個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然後用第1個數字減第2個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停...

1019 數字黑洞 20

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