枚举算法是一种比较笨的办法,就是把每一种可能都试一遍,然后找出所有符合条件的解求出来
找零钱这个题目:
用给定的几种钱币凑成某个钱数,一般而言有多种方式。
例如:给定了6种钱币面值为2、5、10、20、50、100,
用来凑 15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。
显然,最少需要2个钱币才能凑成15元。找出所需要的凑成的钱的方案,以及多少种方案
我们设置6个变量通过6个循环每一种纸币都去试一试,判断每一种硬币需要多少张才可以凑成输入的钱数
大概源代码:
package MeiJu;
/*
* @ly
* 找零钱
* 用给定的几种钱币凑成某个钱数,一般而言有多种方式。
* 例如:给定了6种钱币面值为2、5、10、20、50、100,
* 用来凑 15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。
* 显然,最少需要2个钱币才能凑成15元。 找出所需要的凑成的钱的方案,以及多少种方案
*/
import java.util.*;
public class Test1 {
public static void main(String[] args) {
System.out.print("请输入你所需要凑的钱为:");
Scanner input = new Scanner(System.in);
int money = input.nextInt();
int sum = 0; //记录凑钱的总方案数
/**********暴力。通过循环求解**********/
//在这里我们给出了6种钱币面值,我们可能需要定义6个变量来分别表示每一个钱币所使用多少个钱币
for(int a = 0;a<=money/100;a++)
{
for(int b = 0;b<=money/50;b++)
{
for(int c = 0;c<=money/20;c++)
{
for(int d = 0;d<=money/10;d++)
{
for(int e = 0;e<=money/5;e++)
{
for(int f = 0;f<=money/2;f++)
{
if(a*100+b*50+c*20+d*10+e*5+f*2 == money) //通过判断每张钱币的
{
sum++;
System.out.println(a+","+b+","+c+","+d+","+e+","+f);
}
}
}
}
}
}
}
System.out.print("凑钱总方案数为:"+sum);
input.close();
}
}
结果:
虽然枚举算法很笨,效率低,但是对于较小的数,还是很实用的