怎样用C语言编程一下这道题?

来源:百度知道 编辑:UC知道 时间:2024/06/06 08:45:36
集合{1, 2, 3, … , 32, 33}中有多少子集里面的所有数之和大于280,写出过程

前面这段话,可能让你误解了,删掉

使用回溯法实现,计算量很大,最后结果 :共有 32174932 个子集满足和为280

去掉打印,可以提高速度

#include<stdio.h>
void p(unsigned long count, int a[], int n)
{
int i;
printf("%10lu ", count);
for(i=0;i<n;i++)
printf("%2d ", a[i]);
printf("%3d\n", f(a,n));
}
int f(int a[], int n)
{
int i,k=0;
for(i=0;i<n;i++)
k+=a[i];
return k;
}

void main()
{
unsigned long count=0L;
int a[33];
int i=0;
a[i]=33;
while(a[0]>23)
{
while(i<33 && a[i]>0 && f(a,i)<280)
{
a[i+1]=a[i]-1;
i++;
}
if(i<33 && a[i]>0)
{
count++;
p(count,a,i);
}
i-=2;
a[i]--;
while(a[i]==0)
{
i--;
a[i]--;
}
}
printf("count = %10ul\n", count);
getch();
}

#include <stdio.h