稱重問題遞迴解法

2021-08-17 19:20:52 字數 821 閱讀 7142

用天平稱重時,我們希望用盡可能少的砝碼組合稱出盡可能多的重量。

如果只有5個砝碼,重量分別是1,3,9,27,81 則它們可以組合稱出1到121之間任意整數重量(砝碼允許放在左右兩個盤中)。 本題目要求程式設計實現:對使用者給定的重量,給出砝碼組合方案。 例如: 使用者輸入: 5 程式輸出: 9-3-1 使用者輸入: 19 程式輸出: 27-9+1 要求程式輸出的組合總是大數在前小數在後。 可以假設使用者的輸入的數字符合範圍1~121。

思路:觀察:

1 = 1;

2 = 3 - 1;

3 = 3;

4 = 3 +1;

5 = 9 - 3 -1;

可得規律

2>3/2  5 > 9/2

由此可得當目標重量值大於最大砝碼值的1/2時必然會出現減號

**:/**

* 遞迴求法

* @author administrator

* */

public class main }

/*** 遞迴思路:

* 1.算出可能用到的最大砝碼

* 2.如果最大砝碼和重物相等返回砝碼質量

* 3.如果最大砝碼的質量的二分之一大於重物則使用最大砝碼的前一級砝碼"+"重物減去最大砝碼的前一級砝碼的遞迴結果

* 4.如果最大砝碼的質量的二分之一小於重物則使用最大砝碼的前一級砝碼"-"最大砝碼減去重物的遞迴結果

* 5.注意去負號時的符號取反

* @param x

* @return

*/static string f(int x){

int a = 1;//最小單位

while(a

漢諾塔問題的遞迴解法與非遞迴解法(堆疊解法)

1.遞迴演算法,三步 移動n 1到b,移動1到c,移動n 1到c。includeusing namespace std int j 1 void move char a,char c void hanio int n,char a,char b,char c hanio n 1,a,c,b move...

N皇后問題(遞迴與非遞迴解法)

最近演算法老師講到了 皇后問題,我順便在這邊總結一下他的思路,主要還是深搜加剪枝 解題思路 用陣列 儲存每個皇后在下標行中的位置 即列 然後進行深搜加剪枝判斷,如果不符合條件了,則回朔 思路很簡單,下面的 包含兩種解法 include include define m 8 修改此處改變皇后的基數 b...

約瑟夫環問題C 遞迴解法

約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0 n 1,最後 1 結果...