您好我求助于您的帮助,意在向我表明,解决此问题必须遵循的步骤明确表示我不是要求解决问题的方法
给定一个集{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;
}
在这种情况下,两个人给了我而不是一个错误的
答案 0 :(得分:1)
您可以使用值的总和为n *(n + 1)/ 2的事实。你的任务是找到所有n *(n + 1)/ 4的集合。为此,您可以使用更改算法(根据您的要求递归)。你的硬币是1到N的整数,你要分配的钱是n *(n + 1)/ 4。