使用Backtracking计算硬币阵列的可能组合

时间:2017-07-09 16:14:35

标签: c

问题涉及以下内容。

对于给定的数组

int coins[2] = { 1, 2 };

它应该返回3。 因为有可能的组合。

1 + 1 + 1 + 1 = 4
1 + 1 + 2 = 4
2 + 2 = 4   

但是我的函数返回5,有什么想法吗?

int change(int coins[], int n, int sum, int index);

int main() { 
    int coins[2] = { 1, 2 };
    int c = change(coins, 2, 4, 0);
    printf("%d", c);
}

int change(int coins[], int n, int sum, int index) {
    if (sum == 0)
        return 1;
    if (sum < 0) {
        return -1;
    }

    for (int i = 0; i < n; i++) {
        if (coins[i] > sum)
            continue;
        int k = change(coins, n, sum - coins[i], index);
        if (k > -1)
            return k + 1;
    }
    return -1;
}

1 个答案:

答案 0 :(得分:0)

在调用函数的行代码中尝试:

int c = change(coins,2,4,0) - 1;

尝试不同的案例。