gpt4 book ai didi

c - 从哪里开始用 c 解决这个练习

转载 作者:行者123 更新时间:2023-12-02 03:27:37 25 4
gpt4 key购买 nike

您好,我求助于您的目的是向我表明,解决此练习我必须遵循的步骤是什么?明确表示我不是在寻求问题的解决方案

给定一个集合 {1...N} 我们可以将它分成两个子集,它们的总和给出相同的子集,例如 N = 3:

{1,2} = {3}

另一个 N = 7 的例子:

{1,6,7} = {2,3,4,5}
{2,5,7} = {1,3,4,6}
{3,4,7} = {1,2,5,6}
{1,2,4,7} = {3,5,6}

给定一个 N,计算有多少种方法可以使子集满足此属性,对于 N = 3,我们已经看到存在这种可能性;对于 N = 7,我们有 4 种可能性。制作一个递归算法来求解任何 0 < N < 39。

Example input:
7
The function must be given:
3
Example input 2:
3
Example output 2
1

欢迎任何帮助

编辑

#include<stdio.h>

int count( int S[], int m, int n )
{
if (n == 0)
return 1;


if (n < 0)
return 0;
if (m <=0 && n >= 1)
return 0;
return count( S, m - 1, n ) + count( S, m, n-S[m-1] );
}
int main()
{
int arr[] = {1,2};
int m = sizeof(arr)/sizeof(arr[0]);
printf("%d ", count(arr, m, 3));

return 0;
}

在这种情况下,两个给我而不是一个,这是错误的

最佳答案

您可以利用值的总和为 n*(n+1)/2 这一事实。你的任务是找出所有 n*(n+1)/4 的集合。为此,您可以使用更改算法(根据您的要求递归)。你的硬币是1到N的整数,你要分配的钱是n*(n+1)/4。

来源:http://en.wikipedia.org/wiki/Change-making_problem

关于c - 从哪里开始用 c 解决这个练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29593851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com