65,211
社区成员
发帖
与我相关
我的任务
分享
Array[1:n]={4,2,2,6,5}
c = 10;
sum = 0;
tmpAry[n]
//先判断特例
sum(Array[1:n]) = c?
如果等于找到答案
否则继续
for(int i= 1~n)
for(int j=1~n)
if( j!= i)
{
sum += Array[j];
if( sum > c)
{
insert(Array[j]) into tmpAry[n];
break;
}
else if( sum == c)找到答案
}
if(a[front]==13)
{
int mm;
mm=1223;
}
刚发现的问题,呵呵,上面的代码是我调试的时候加上去的,可以删除了!嘿嘿~~
太大意了!
#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(a[front]==13)
{
int mm;
mm=1223;
}
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};
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);
}
以前写的背包程序,也就跟lz要求的一样!
其中:N就相当于lz说的100
a就相当于lz说的数组
用了递归和非递归实现~!
呵呵,凑合看吧~~