description
任意乙個4位自然數n(n不能是4個數字一樣,如1111、2222、….9999是不可以的,n也不能是6174),將組成自然數n的4個數字重新排列,形成乙個最大數和最小數,最大數和最小數相減,其差是還是自然數,將差的各數字再重新排列,又形成乙個最大數和最小數,最大數和最小數相減,其差還是自然數。反覆進行,直到差是乙個神秘數6174(數學黑洞)結束。
input
輸入資料有多組,每組佔一行,每行包含乙個4位自然數n。輸入檔案直到eof為止!
output
對每組輸入,輸出有2行。第一行是所有差,以空格分隔,最後乙個數後也有空格;第二行是差的個數。
sample input
10001500
3000
sample output
999 8991 8082 8532 617455085 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個數字重新排列,形...