0 0

请用JAVA实现一个方法,计算出对于一元钱共有多少种组合方法?(假设组合时可以使用的货币包括一元,53

请用JAVA实现一个方法,计算出对于一元钱共有多少种组合方法?(假设组合时可以使用的货币包括一元,5角,2角,1角,5分,2分,1分)要求写出组合方法的个数不要求写出具体组合方式。


求一种比较简单的算法 除去 穷举法   7层循环的那种
2009年6月06日 11:48

2个答案 按时间排序 按投票排序

0 0

朋友,问题要自动关闭啦,结分哦,

2009年6月21日 21:28
0 0

这是一个递归算法, 如下:

public class Counter extends TestCase {
	public void testCounter() {
		Counter counter = new Counter();

		assertEquals(1, counter.count(1, 100) + 1);
		assertEquals(51, counter.count(2, 100) + 1);
		assertEquals(10, counter.count(5, 10) + 1);

		System.out.println(counter.count(5, 100) + 1);
		System.out.println(counter.count(10, 100) + 1);
		System.out.println(counter.count(20, 100) + 1);
		System.out.println(counter.count(50, 100) + 1);
	}

	private int count(int step, int total) {
		if (step <= 1) {
			return 0;

		} else {
			int currentNumber = total / step; // 当前可取值的个数

			int count = currentNumber;

			for (int i = 0; i < currentNumber; i++) {
				int sub = this.count(this.getNextStep(step), total - (i * step));
				count += sub;
			}

			return count;
		}
	}

	private int[] steps = { 50, 20, 10, 5, 2, 1 };

	private int getNextStep(int current) {
		for (int i = 0; i < steps.length; i++) {
			if (current == steps[i]) {
				return steps[i + 1];
			}
		}
		return 0;
	}
}

2009年6月08日 10:12

相关推荐

Global site tag (gtag.js) - Google Analytics