【问题标题】:Total number of ways to count the possible combination for coin [duplicate]计算硬币可能组合的方法总数[重复]
【发布时间】:2011-12-05 03:28:00
【问题描述】:

可能重复:
How to count possible combination for coin problem

在这种情况下,假设金额为 15,硬币为 1、6、7,那么获得它的方式总数为 6。下面的代码工作正常,但效率不高。任何建议将不胜感激。

public class CoinProblem {

    public static void main(String[] args) {
        int amount = 15;
        int coinTypes[] = {1,6,7};


        int combinations = 0;
        for (int i = 0; i * 7 <=15; i++) {
            for (int j = 0; j * 6 + i * 7 <= 15; j++) {
              combinations++;
            }
        }
        System.out.println(combinations);


    }
}

【问题讨论】:

  • 好吧,我的第一个建议是,如果您要使用数组来存储 coinTypes,那么您...实际上在某处的计算中使用数组...
  • 给你这个作业的人一定是在重复使用他们的问题,this question 和你的一样,数量为 15,硬币为 1、6、7。它是用 Java 编写的。还有thisthis
  • 是的,我想我每个月都会看到一次这个问题。

标签: java


【解决方案1】:

如果您正在寻找动态编程解决方案(如果您有更多的硬币和更大的总金额,则可以使用),我的一个想法是:

int[] ways = new int[amount+1];
ways[0] = 1;    //There is only one way to have 0 money, no coins
for (int coin : coinTypes)
{
    for (int i = 1; i <= amount; i++)
    {
        ways[i] += ways[i-coin];
    }
}

标准免责声明,我没有运行此代码。它可能有错误,但看起来确实可以工作。它至少有两个:1.您需要将ways数组初始化为0。2.您需要防止数组下溢(数组索引小于0)。

它的工作方式是,您存储仅使用一种硬币,然后是两种硬币,最后是所有三种硬币,您可以获得多少种方式来获得每个总计数。对于每个金额 y,你知道你可以通过查看所有可以获得 y-x 值的方法,然后添加一个价值 x 的硬币,用一个价值 x 的硬币来达到这个数量。

【讨论】:

    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多