J 數學黑洞

2021-07-29 08:38:24 字數 1356 閱讀 9514

description

任意乙個4位自然數n(n不能是4個數字一樣,如1111、2222、….9999是不可以的,n也不能是6174),將組成自然數n的4個數字重新排列,形成乙個最大數和最小數,最大數和最小數相減,其差是還是自然數,將差的各數字再重新排列,又形成乙個最大數和最小數,最大數和最小數相減,其差還是自然數。反覆進行,直到差是乙個神秘數6174(數學黑洞)結束。

input

輸入資料有多組,每組佔一行,每行包含乙個4位自然數n。輸入檔案直到eof為止!

output

對每組輸入,輸出有2行。第一行是所有差,以空格分隔,最後乙個數後也有空格;第二行是差的個數。

sample input

1000

1500

3000

sample output

999 8991 8082 8532 6174

55085 7992 7173 6354 3087 8352 6174

72997 7173 6354 3087 8352 6174

6

解題思路:

此題為遞迴題,遞迴邊界為差等於6147,若差不為此值,則對這個差進行遞迴

細節處理:

此處我用了vector向量將,用於存放當前數值的每位數(其實用個陣列應該更簡單),對於有些位數不足4位的,要放入0進行填充,最後通過公升序排列再累乘,求出當前的差,對於vector向量來說要在每次遞迴結束後clear,

**:

#include//#include#include#includeusing namespace std;

int sum;

void f(int m)

if(a.size()==3)

a.push_back(0);

if(a.size()==2)

for(int r=0;r<2;r++)

a.push_back(0);

if(a.size()==1)

for(int r=0;r<3;r++)

a.push_back(0);

if(a.size()==0)

for(int r=0;r<4;r++)

a.push_back(0);

sort(a.begin(),a.end());

int max,min,cha;

max=a[3]*1000+a[2]*100+a[1]*10+a[0]; min=a[0]*1000+a[1]*100+a[2]*10+a[3];

cha=max-min;

if(cha==6174)

return 0;

}

遞推遞迴練習 J 數學黑洞

description 任意乙個4位自然數n n不能是4個數字一樣,如1111 2222 9999是不可以的,n也不能是6174 將組成自然數n的4個數字重新排列,形成乙個最大數和最小數,最大數和最小數相減,其差還是自然數,將差的各數字再重新排列,又形成乙個最大數和最小數,最大數和最小數相減,其差還...

3470數學黑洞

time limit 1000ms memory limit 65536k 任意乙個4位自然數n n不能是4個數字一樣,如1111 2222 9999是不可以的,n也不能是6174 將組成自然數n的4個數字重新排列,形成乙個最大數和最小數,最大數和最小數相減,其差是還是自然數,將差的各數字再重新排列...

SDUT 數學黑洞

time limit 1500 ms memory limit 65536 kib submit statistic problem description 任意乙個4位自然數n n不能是4個數字一樣,如1111 2222 9999是不可以的,n也不能是6174 將組成自然數n的4個數字重新排列,形...