演算法提高 數字黑洞
時間限制:1.0s 記憶體限制:256.0mb
問題描述
任意乙個四位數,只要它們各個位上的數字是不全相同的,就有這樣的規律:
1)將組成該四位數的四個數字由大到小排列,形成由這四個數字構成的最大的四位數;
2)將組成該四位數的四個數字由小到大排列,形成由這四個數字構成的最小的四位數(如果四個數中含有0,則得到的數不足四位);
3)求兩個數的差,得到乙個新的四位數(高位零保留)。
重複以上過程,最後一定會得到的結果是6174。
比如:4312 3087 8352 6174,經過三次變換,得到6174
輸入格式
乙個四位整數,輸入保證四位數字不全相同
輸出格式
乙個整數,表示這個數字經過多少次變換能得到6174
樣例輸入
4312
樣例輸出 3
目的明確,題意很清晰的。
1 #include2 #include3 #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...