巧用進製解「天秤」問題 演算法筆記

2021-10-04 08:50:35 字數 905 閱讀 7773

每個砝碼只能用一次!

思想:利用進製轉換寫,先把所給的數轉換成3進製,再轉換成字串,

逆轉(這樣從左到右就是位數從低到高,

數值是1就不管,是2就往上進一位,並將此位記為-1,-1表示待會放在

左邊砝碼;是3就往上進一位,並將此位記為0)

//將數 n 轉換成 3 進製字串 ,且把三進製數翻轉過來了。

return s+

'0';

}int

main()

else

if( s[i]

=='2')

s[i+1]

++;}else

if(s[i]==3

) s[i+1]

++;}}

//mcout << s << endl;

for(

int i=s.

length()

-1; i>=

0; i--

)//不需要將s再翻轉,直接開始3進製運算

cout <<

(s[i]

-'0')*

pow(

3,i);}

return0;

}

巧用進製解決天平稱問題《演算法很美》

用天平稱重時,我們希望佣金可能少的砝碼組合稱出盡可能多的重量。如果有無限個砝碼,但它們的重量分別是1,3,9,27,81,等3的指數冪神奇之處在於用它們的組合可以稱出任意整數重量 砝碼允許放在左右兩個盤中 本題目要求程式設計實現 對使用者給定的重量,給出砝碼組合方案,重量 1000000。例如 使用...

巧用dfs解數獨問題 演算法筆記

巧妙的用 n 表示 第n 9行第n 9列 0是第乙個數 巧妙的用 row n 9 33 col n 9 33 表示數獨裡面的小正方形 行 列 那麼遍歷數獨就至於要乙個 n即可。0 n 81 因為數獨答案唯一,所以只要找到乙個正確的,就可以 exit 0 了。include include exit ...

演算法筆記習題 問題 C 進製轉換

普通10進製轉換為二進位制的方法是除數取餘法。0位數字的十進位制數,查閱以後發現long long int型的範圍大約是10 18,不足以表示10 30。所以這題的思路是用陣列儲存這個數值,然後用陣列的方式模擬除數取餘法 陣列最後乙個數,就是10進製數的尾數,尾數對2取餘的值 陣列表示的這個10進製...