一个C编程题!!急!!在线等待!高分悬赏!!!

2024-11-03 05:31:31
推荐回答(2个)
回答1:

用C++写的,程序如下。
类似背包问题,意思你自己理解吧,很简单。
#include
#include

using namespace std;

int a[10000],n,result=0,rescount=0,b[10000],c[10000],capacity;

void fun(const int cap,int count)
{
if(!cap)
{
for(int i=0;i cout<隐山 cout< system("pause");
exit(0);
}
for(int i=0;i {
if(a[i]&&(cap-a[i]>=0))
{
b[count]=a[i];
a[i]=0;
fun(cap-b[count],count+1);
a[i]=b[count];
b[count]=0;
}
}
if(cap {
result=cap;
rescount=count;
memcpy(c,b,sizeof(int)*count);
}
}

int main()
{
srand(time(NULL));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
//cin>>capacity;
capacity=rand()%999999999+1;
cout<<"capacity="< /尺源/cin>>n;
n=rand()%10000+1;
cout<<"n="< result=capacity;
for(int i=0;i {
//cin>>a[i];
a[i]=rand()%100000+1;
//cout< }
fun(capacity,0);
for(int i=0;i cout< cout< system("pause");
return 0;
}

回答2:

要是不考虑时间代价的话,用递归可以实现吧。。。