C++编程。有一个1到20的数组,求出其中和为20的所有组合,例如20. 1,19. 1,2,17 等等

如题

估计最多组合是5 到 6 个 数,所以 用 6 重循环。
遍历一下,几个数相加等于 20 就输出。

#include <stdio.h>
#include <stdlib.h>
main()
{
int v[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int i1,i2,i3,i4,i5,i6;
int s;
for (i1=0;i1<20;i1++){
if (v[i1]==20) printf("%d\n",v[i1]);
for (i2=i1+1;i2<20;i2++){
if (v[i1]+v[i2]==20) printf("%d %d\n",v[i1],v[i2]);
for (i3=i2+1;i3<20;i3++){
s = v[i1]+v[i2]+v[i3];
if (s==20) printf("%d %d %d\n",v[i1],v[i2],v[i3]);
if (s>20) continue;
for (i4=i3+1;i4<20;i4++){
s = v[i1]+v[i2]+v[i3]+v[i4];
if (s==20) printf("%d %d %d %d\n",v[i1],v[i2],v[i3],v[i4]);
if (s > 20) continue;
for (i5=i4+1;i5<20;i5++){
s = v[i1]+v[i2]+v[i3]+v[i4]+v[i5];
if (s==20) printf("%d %d %d %d %d\n",v[i1],v[i2],v[i3],v[i4],v[i5]);
if (s > 20) continue;
for (i6=i5+1;i6<20;i6++){
s = v[i1]+v[i2]+v[i3]+v[i4]+v[i5]+v[i6];
if (s==20) printf("%d %d %d %d %d %d\n",v[i1],v[i2],v[i3],v[i4],v[i5],v[i6]);
if (s > 20) continue;
}
}
}
}
}
}
return 0;
}

结果一大堆:
1 2 3 4 10
1 2 3 5 9
1 2 3 6 8
1 2 3 14
1 2 4 5 8
。。。
7 13
8 12
9 11
20
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-24
不会这个啊