切換
舊版
前往
大廳
主題

ZeroJudge - e590: 11371 - Number Theory for Newbies 解題心得

Not In My Back Yard | 2020-01-25 21:56:07 | 巴幣 2 | 人氣 122

題目連結:


題目大意:
已知給定任意正整數 n ,將其位數打散重組成另一數。該數與 n 之差必為 9 的倍數。

輸入有多筆測試資料,每筆佔一列。每列給定一正整數 n (n ≦ 2000000000),請找到一組數對 a 、 b (兩數由 n 重組而得且兩者皆無前導 0),其差值(a - b)盡可能地大,並找出該差值可由 9 乘以何數而得。

輸出格式請參見範例輸出。



範例輸入:
123
2468


範例輸出:
321 - 123 = 198 = 9 * 22
8642 - 2468 = 6174 = 9 * 686


解題思維:
要讓差值盡量地大,也就是要讓 a 盡量地大、 b 盡量地小。

明顯可以看出將 n 的各個位數由大排到小,即可得最大的數字;而最小,因為不能有前導 0(即不能以 0 開頭),所以將位數由小到大排的時候,將 0 的順位放在第二順位(n 有 1 就放排在 1 之後、沒有 1 就排在 2 之後、沒有 2 就排在 3 之後等等)。

分別排完得到兩數之後就單純地相減可。但是如果是用 C 、 C++ 等需要使用 long long 型態來儲存 a 、 b 。因為 n 重新排列之後可能會超出 int (2 ^ 31 - 1)範疇。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作