求一个算法:N个数,用其中M个任意组合相加等于一个已知数X。得出这M个数是哪些数。

来源:百度知道 编辑:UC知道 时间:2024/07/06 22:31:11

int a[N];
for(int i=0;i<N;i++)
for(int j=i+1;j<N;j++)
.
.
.
M个
if(a[i]+a[j]+...==X)M个
cout<<a[i]<<a[j]...M个

N有范围没
如果范围比较大的话用深搜,记得排序,注意剪枝
范围小的话直接穷举
也就是设一个字符串,里面有M个1,N-M个0,产生所有全排列
当一位为1时,就表示选择这个数,为0表示不选择
初始为a[] = 00...0111...1(M个1)使用next_permutation(a, a+n)产生所有含有M个1、N-M个0的全排列,并判断和是否为X