作爲一名畢業生,我參加了一個java開發角色的面試,在技術考試中表現出色,直到我提出反對這個問題。解決供應商機器變更問題的Java算法
如果我設置了一臺自動售貨機(爲簡單起見)返回£2更改。我將如何產生一個實例,列出所有可能的£2組合。
對於如£1 +£1,£1 + 50P + 50P,50P + 50P + 50P + 50P等..
我怎麼會被列出的2.00£變化可能所有的不同組合售貨機。
我開始寫點東西,這是迄今爲止發明的。
它幾乎工作,除了有人能幫我找出爲什麼它沒有完全擴大。第二雙眼睛會很感激。還有任何可以優化的方法。
謝謝你們。
private static void printCoins(int[] tempArray) {
for (int i = 0; i < tempArray.length - 1; i++){
// to stop my array from printing out any non-denominator coins e.g
if (tempArray[i] > 0){
System.out.print(tempArray[i] + ": ");
}
System.out.println("\n");
}
}
public static void vendingMachine() {
int[] denominations = {200,100, 50, 20, 10, 5, 2, 1};
int[] tempArray = new int[50]; //combination of coins made
int total = 200;
int coinCombiIndex = 0, denomCoinIndex = 0;
// whilst all denominations havent been visited
while (denomCoinIndex < denominations.length)
// if i have the correct change
if (total - denominations[denomCoinIndex] == 0){
tempArray[coinCombiIndex] = denominations[denomCoinIndex];
denomCoinIndex++; //increment so that next iteration starts with lower denom
printCoins(tempArray); // return coins
}
// checks to see whether new total minus coin (denominator) is still >= 0
else if (total - denominations[denomCoinIndex] >= 0) {
// if so SUBTRACT from total and ADD coin to coin-combination-array
total = total - denominations[denomCoinIndex];
tempArray[coinCombiIndex] = denominations[denomCoinIndex];
coinCombiIndex++;
}
else {
denomCoinIndex++;
}
// printCoins(tempArray);
}
我的輸出
200:
100: 100:
100: 50: 50:
100: 50: 20: 20: 10:
100: 50: 20: 20: 5: 5:
100: 50: 20: 20: 5: 2: 2: 1:
重複://stackoverflow.com/questions/1106929/find-all-combinations-of-coins-when-given-some-dollar-value – toto2
上面的鏈接是如此受歡迎,它已被製作成社區維基。我想這是一個常見的面試問題。 – toto2
這個問題非常受歡迎,如果您對動態編程進行了一些研究,您會發現詳細討論它。 –