65,189
社区成员




#include <stdio.h>
#include <stdlib.h>
#define num 10
#define true 1
#define false 0
int arrayflag[num];
void printarray(int arrayflag[],int array[])
{
for (int i=0;i<num;i++)
{
if (arrayflag[i])
{
printf("%-6d",array[i]);
}
}
printf("\n");
}
void bagProb(int array[],int sum,int m_i)
{
for (int i=m_i;i<num;i++)
{
if (array[i]<sum)
{
arrayflag[i]=true;
bagProb(array,sum-array[i],i+1);
arrayflag[i]=false;
}else{
if (array[i]==sum)
{
arrayflag[i]=true;
printarray(arrayflag,array);
arrayflag[i]=false;
}
}
}
}
int main()
{
for (int i=0;i<num;i++)
{
arrayflag[i]=false;
}
int array[num]={1,9,2,2,1,4,3,2,6,4};
bagProb(array,4,0);
return 0;
}
int sum(int *t,int n)
{
int s=0;
for (int i=0;i<n;++i) s+=t[i]*(i+1);
return s;
}
void print(int *t,int n)
{
for (int i=0;i<n;++i)
{
if (t[i]) cout<<i+1<<" ";
}
cout<<endl;
}
void search(int m,int n,int *t,int p)
{
int s=sum(t,n);
if (m==s) print(t,n);
else if(m>s)
{
for (int i=p;i<n;++i)
{
++t[i];
search(m,n,t,i+1);
--t[i];
}
}
}
int main()
{
int m,n;
cout<<"m=";
cin>>m;
cout<<"n=";
cin>>n;
int *t=new int[n];
memset(t,0,sizeof(int)*n);
search(m,n,t,0);
delete []t;
return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
/************************************************************************/
/* 递归 */
/************************************************************************/
void getResult(int a[],int size,int N,int res[],int resSize)
{
if (size==1)
{
if(N==a[0])
{
for (int j=0;j<resSize;j++)
{
cout<<res[j]<<" ";
}
cout<<a[0];
cout<<endl;
}
return;
}
if(N==a[0])
{
for (int j=0;j<resSize;j++)
{
cout<<res[j]<<" ";
}
cout<<a[0];
cout<<endl;
}
res[resSize++] = a[0];
getResult(&a[1],size-1,N-a[0],res,resSize);
resSize--;
getResult(&a[1],size-1,N,res,resSize);
}
/************************************************************************/
/* 非递归 */
/************************************************************************/
void getResult(int a[],int size,int N)
{
vector<int> iv;
vector<int> indexv;
int back=0;
int sum=0;
while (back<size)
{
int front = back;
while (front!=size)
{
if (sum+a[front]<N)
{
iv.push_back(a[front]);
indexv.push_back(front);
sum+=a[front];
}
else if (sum+a[front]==N)
{
for (vector<int>::const_iterator it = iv.begin();it!=iv.end();it++)
{
cout<<*it<<" ";
}
cout<<a[front]<<endl;
if (iv.empty())
{
break;
}
sum-=iv.back();
iv.pop_back();
front = indexv.back();
indexv.pop_back();
if (iv.empty())
{
break;
}
}
else
{
sum-=iv.back();
iv.pop_back();
front = indexv.back();
indexv.pop_back();
if (iv.empty())
{
break;
}
}
front++;
}
sum = 0;
iv.clear();
indexv.clear();
back++;
}
}
void main()
{
int a[] = {1,1,3,5,8,9,1,10,13};//把这里初始化为0/1/2/3.../n
int b[sizeof(a)/sizeof(int)];
int N = 13;
sort(a,a+sizeof(a)/sizeof(int));//这里不需要排序了
getResult(a,sizeof(a)/sizeof(int),13,b,0);
getResult(a,sizeof(a)/sizeof(int),13);
}