p1633 進製應用 砝碼稱重

2022-08-16 13:48:22 字數 1384 閱讀 8695

描述 description

乙個天平,砝碼分別為1g、3g、9g、27g、…6561g,每個砝碼只有乙個,要稱重的物品放在天平的左側,而砝碼允許放在天平的左右兩側。已知乙個物品的重量,問如何稱重?試程式設計解決

輸入格式 input format

乙個重量n(1≤n≤9000)

輸出格式 output format

將所使用的砝碼重量,按從大到小的順序輸出。其中與物品異側的砝碼用正號表示,與物品同側的砝碼用負號表示。(第乙個砝碼前的正號要省略)

樣例輸入 sample input

15樣例輸出 sample output

27-9-3

時間限制 time limitation

1s注釋 hint

三進製的典型應用

** source

經典題目

神知道為啥我剛剛打過一遍的部落格神秘bug導致我還得再打一遍.......

.思路:剛剛拿到這個題的時候不明白為什麼要用三進製,後來問了問機房的dalao(瀾神),仔細想了想突然明白是為啥了

因為三進製這一位的前一位一定高這一位3倍,又因為所有砝碼都只有乙個且是從1開始後面每乙個都是前乙個的3倍,因為

三進製為1,0,2,這三個數,由題意可知我們每個砝碼只有1個,所以就將2換位-1,並前一位++,以此類推,知道這個陣列裡

面就只有0,-1,1,這三個數。如果a[i]==0那麼就continue,如果為1則+1,為-1則減一。(切記第乙個數上是沒有+號的)

**如下:

#include#include

#include

#include

#include

#include

using

namespace

std;

int a[100000

];int

main()

for(int i=0;i)

}if(a[len]!=0

) len++;

string s=""

;

int h=1

;

for(int i=1;i)

for(int i=len-1;i>=0;i--)

if(a[i]==-1

)

if(a[i]==1

)

}cout

return0;

}

(● ̄(エ) ̄●)

洛谷 P1633 二進位制

我去考fop zz的 結果他真的秒掉了 我們考慮三個長度為l的串 顯然如果這3個串符合條件的話 我們就只要保證增加2 l級別的值滿足加法原則就好了 所以我們大力dp f i a b c 0 1 i表示位數 a表示x串前i 1個字元所有的1的數量 b,c同理 0 1表示c串在第i位是1還是0 預處理 ...

砝碼稱重(三進製)

題目描述 5個砝碼 用天平稱重時,我們希望用盡可能少的砝碼組合稱出盡可能多的重量。如果只有5個砝碼,重量分別是1,3,9,27,81。則它們可以組合稱出1到121之間任意整數重量 砝碼允許放在左右兩個盤中 本題目要求程式設計實現 對使用者給定的重量,給出砝碼組合方案。輸入例如 使用者輸入 5輸出 程...

砝碼稱重(三進製)

題目描述 5個砝碼 用天平稱重時,我們希望用盡可能少的砝碼組合稱出盡可能多的重量。如果只有5個砝碼,重量分別是1,3,9,27,81。則它們可以組合稱出1到121之間任意整數重量 砝碼允許放在左右兩個盤中 本題目要求程式設計實現 對使用者給定的重量,給出砝碼組合方案。輸入例如 使用者輸入 5輸出 程...