【问题标题】:Finding out all possible ways of getting a sum from a fixed set of numbers找出从一组固定数字中求和的所有可能方法
【发布时间】:2017-11-13 07:24:45
【问题描述】:

这个问题很简单。有一个集合 {2,4,6}。预期的答案是得到数字 6 的所有可能排列。因此,答案将是:-

{ 2,2,2} , {2,4} , {4,2} , {6}

我尝试过的:-

我正在尝试使用流行的“硬币找零”问题来解决这个问题。但是在硬币变化排列中不存在。表示 {2,4} 和 {4,2} 被认为是相同的。这是我的代码。它不考虑排列。

public static int NumberOfWays(int sum)
{
    int [][] memMatrix = new int [7][sum+1];
    for (int i = 2 ; i <= 6 ; i += 2)
    {
        for (int j = 0 ; j <= sum ; j += 2)
        {
            if (i == 2)
            {
                //using only 2 , there is only 1 way to get the sum
                memMatrix[i][j] = 1;
            }
            else if ( i > j)
            {
                //if total sum is less than the newly used denomination , then the number of ways will always remain same
                memMatrix[i][j] = memMatrix[i - 2][j];
            }
            else
            {
                //if this is the case then need to calculate without using the denomination + using the denomination
                memMatrix[i][j] = memMatrix[i - 2][j] + memMatrix[i][j - i];
            }
        }
    }
    for (int i = 2 ; i <= 6 ; i += 2)
    {
        for (int j = 2 ; j <= sum ; j += 2)
        {
            System.out.print(memMatrix[i][j]+" ");
        }
        System.out.print("\n");
    }

    return memMatrix[6][sum];
}

这是我与矩阵一起得到的输出。我如何也可以进行帐户排列?

1 1 1 
1 2 2 
1 2 3 
The number of ways to get 6 = 3

【问题讨论】:

    标签: sum set permutation dynamic-programming coin-change


    【解决方案1】:

    我得到了解决方案。这很简单。代码已注释。它可能需要一点跟踪。

     #include <bits/stdc++.h>
     using namespace std;
    
      // Function to find the total number of ways to get change of N from
     // unlimited supply of coins in set S
    int count(int S[], int n, int N)
    {
    // if total is 0, return 1
    if (N == 0)
        return 1;
    
    // return 0 if total become negative
    if (N < 0)
        return 0;
    
    // initialize total number of ways to 0
    int res = 0;
    
    // do for each coin
    for (int i = 0; i < n; i++) 
    {
        // recuse to see if total can be reached by including
        // current coin S[i]
        res += count(S, n, N - S[i]);
    }
    
    // return total number of ways
    return res;
    }
    
    // main function
    int main()
    {
    // n coins of given denominations
    int S[] = { 1, 2, 3 };
    int n = sizeof(S) / sizeof(S[0]);
    
    // Total Change required
    int N = 4;
    
    cout << "Total number of ways to get desired change is "
            << count(S, n, N);
    
    return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      相关资源
      最近更新 更多