例:
有数组: int v[10]={1,2,3,4,5,6,7,8,9,10};//数组值任意
是否存在:v[0] + v[2] + ... + v[9]=35; //数组中任意几个的和是否存在和值为35。
存在输出这几个数,不存在输出其他标记。
int cnt;
void printa(int a[], int used[], int n)
{
++cnt;
for (int i = 0; i < n; ++i)
{
if (used[i])
cout<< a[i] << " ";
}
cout << endl;
}
void tt(int a[], int n, int sum, int used[], int i)
{
if (i >= n)
return;
used[i] = 1;
if ( sum == a[i] )
printa(a, used, n);
else
tt(a, n, sum-a[i], used, i+1);
used[i] = 0;
tt(a, n, sum, used, i+1);
}
void main()
{
int a[] = {1,2,3,5,6,7,8,9,10};
const int n = sizeof(a)/sizeof(a[0]);
int used[n] = {0};
tt(a, n, 40, used, 0);
if (0 == cnt)
cout << "impossibility\n";
}