每個砝碼只能用一次!
思想:利用進製轉換寫,先把所給的數轉換成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進製...