用天平稱重時,我們希望佣金可能少的砝碼組合稱出盡可能多的重量。
如果有無限個砝碼,但它們的重量分別是1,3,9,27,81,…等3的指數冪神奇之處在於用它們的組合可以稱出任意整數重量(砝碼允許放在左右兩個盤中)。
本題目要求程式設計實現:對使用者給定的重量,給出砝碼組合方案,重量<1000000。
例如:使用者輸入:
程式輸出
9-3-1
思路:
輸入了5對吧,將5變成3進製則為 「12」,然後將"12",進一位則為"2-1",還不能表示,那麼再進一位為"1-1-1",則(13^2)(-13)(-11*3 ^ 0) = 9-3-1
具體思路:
final string x = integer.tostring(n,3);
轉稱3進製
char arr = new stringbuilder(x).reverse().tostring().tochararray();
放入stringbuider(x)進行翻轉再轉成字串再轉成字元陣列。
listlist = new arraylist<>();
建立乙個list容器處理0,-1,1
遍歷arr陣列
這裡就要注意了,經典你要把這抽象起來,其實無法就是用了if if-else else去做判斷,判斷3進製裡面的3鐘數,2、3、1或者0這是外界
每判斷2、3外界數,就插入相應的數,並判斷是否是最後乙個數,如果是則插入其對應數,不是的話就進一位。
其他數就直接插入
暴力法思路:
先定義好s=//用做改變是減號還是加號還是0的作用
然後for遍歷a、b、c、d、e 用作改變1,3,9,27,81正負0的下標
建立乙個stringbuilder,判斷正負將1,3,9,27,81帶符號的放進去
記住還要除去第乙個字元的正負號
public
class 巧用進製解決天平稱重問題
else
}else
if(arr[i]
=='3'
)else
}else
}stringbuilder sb =
newstringbuilder()
;for
(int i =
0; i < list.
size()
; i++
) system.
out.
println
(sb.
substring(1
));}
private
static
voidm1(
int n)
;for
(int a =
0; a <
3; a++)}
}}}}
}}
天平稱球問題
筆試題目碰到了天平稱球的問題,之前遇到沒有細細的查閱資料,再次筆試的時候就吃虧了,這裡記錄下結論 現有n個小球,其中有乙個壞球不知比標準球輕還是重。我們令h 1 要保證在n個球中找出壞球並知道其輕重,至少需要稱h次。假設n 2,我們有 2 如果n 3h 1 2,那麼稱h次就足夠了 3 如果n 3h ...
天平稱小球問題
天平稱小球問題 天平稱小球問題有很多經典的正規化解法,在這裡我們談論著只是其中最為廣泛應用的一種 三進製編碼解法。為什麼想起了使用三進製?其實很好理解。讓我們考慮一下小球的狀態,有 沒放在天平上 在天平左盤 在天平右盤三種。我們不妨用一些數碼來表示這三種狀態 0 沒放在天平上 1 放在天平左盤 2 ...
天平稱球問題
筆試題目碰到了天平稱球的問題,之前遇到沒有細細的查閱資料,再次筆試的時候就吃虧了,這裡記錄下結論 現有n個小球,其中有乙個壞球不知比標準球輕還是重。我們令h 1 要保證在n個球中找出壞球並知道其輕重,至少需要稱h次。假設n 2,我們有 2 如果n 3h 1 2,那麼稱h次就足夠了 3 如果n 3h ...