硬幣表示某個給定值數《演算法很美》

2021-10-17 08:46:30 字數 1282 閱讀 4123

分為兩次方式:遞推和遞迴的形式。

/**

* 假設我們有8種不同的值的硬幣,用這些硬幣組合構成乙個給定的數值n。

* 例如n=200,那麼一種可能的組合方式為 200 = 3 * 1 + 1*2 + 1*5 + 2*20 + 1*50 + 1*100.

* * [華為面試題] 1分2分5分的硬幣三種,組合成1角,共有多少種組合

* 1*x + 2*y + 5*z = 10

* [創新工廠筆試題] 有1分,2分,5分,10分四種硬幣,每種硬幣數量無限,給定n分錢,有多少種組合可以組成n分錢

1 5 10 25 分 n,多少種組合方法

*/public

class 硬幣表示某個給定數值

}int

state;

/*遞推解法*/

public

intcountways1

(int n)

;int

dp =

newint[4

][n +1]

;//前i種面值,組合出面值j

for(

int i =

0; i <

4; i++

)for

(int j =

0; j < n +

1; j++

)for

(int i =

1; i <

4; i++)}

}return dp[3]

[n];

}/*遞推解法*/

public

intcountways2

(int n)

;int

dp =

newint

[n +1]

; dp[0]

=1;for

(int i =

0; i <

4; i++)}

return dp[n];}

/*遞迴形式*/

public

intcountways

(int n),3

);}private

intcountwayscore

(int n,

int[

] coins,

int cur)

return res;

}

12

3456

7n11

1111

1115

1111

22101

251

求給定值範圍內的所有完數

package org.study 功能 輸入給定值,求該值範圍內的完數。完數 乙個數的所有因子之和等於數本身。例如 6 1 2 3 public class perfectnumber public perfectnumber int factornum public void reset 求輸入...

9 回文數(判斷給定int值是否為回文數)

判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 1 輸入 121 輸出 true 示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例 3 輸入 10 輸出 false 解釋 從右向左...

最少的硬幣組合出1到m之間的任意值(貪婪演算法)

首先判斷有無解,如果最小面額硬幣大於1則無解,因為搭配不出1。如果有1則有解,因為所有面額都可以由1堆積出來。接下來思考乙個問題,假設當前硬幣可以組合出1到5的任意面額,那麼新增一枚面額為6的硬幣就可以搭配出1到11的任意面額。考慮1 i 1已經構出,那麼再加一枚什麼面值的硬幣最優,顯然選一枚 su...