Java通过枚举求找零钱问题

枚举算法是一种比较笨的办法,就是把每一种可能都试一遍,然后找出所有符合条件的解求出来

找零钱这个题目:

用给定的几种钱币凑成某个钱数,一般而言有多种方式。
  例如:给定了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();
	}
} 

结果:


虽然枚举算法很笨,效率低,但是对于较小的数,还是很实用的


猜你喜欢

转载自blog.csdn.net/lytwy123/article/details/81030099
今日推荐