C++ c++;排列所有可能的组合
我的问题是,我有一个14位的数组,我想有一个程序,可以给出所有可能的结果 8位以内的组合,总和为40 比如说 14位数字是C++ c++;排列所有可能的组合,c++,C++,我的问题是,我有一个14位的数组,我想有一个程序,可以给出所有可能的结果 8位以内的组合,总和为40 比如说 14位数字是1,7,7,4,6,5,5,2,4,7,10,3,9,6, 我应该是这样的 6+5+6+7+2+3+2+9=40 7+7+7+7+6+4+1+1=40 因为数组的大小只有14,所以我不会进行优化。 您的问题可以通过使用按位操作查找所有组合来解决 其思想是:生成给定数组(集合)的所有子集,该集合称为幂集。对于每个子集(组合),检查子集的元素总和是否等于40 请参阅以下教程,
1,7,7,4,6,5,5,2,4,7,10,3,9,6,
我应该是这样的
6+5+6+7+2+3+2+9=40
7+7+7+7+6+4+1+1=40
因为数组的大小只有14,所以我不会进行优化。 您的问题可以通过使用
按位操作查找所有组合来解决
其思想是:生成给定数组(集合)的所有子集,该集合称为幂集。对于每个子集(组合),检查子集的元素总和是否等于40
请参阅以下教程,了解如何使用逐位运算查找所有组合
C++实现:
int main()
{
int A[] = { 1, 7, 7, 4, 6, 5, 5, 2, 4, 7, 10, 3, 9, 6 };
int n = sizeof(A) / sizeof(A[0]);
int desiredsum = 40;
int total_soln=0;
for (int i = 0; i <= (1 << n); ++i)
{
vector < int >v;/*The vector contains element of a subset*/
for (int j = 0; j <= n; ++j)
{
if (i & 1 << j)
v.push_back(A[j]);
}
if (v.size() == 8)/*Check whether the size of the current subset is 8 or not*/
{
//if size is 8, check whether the sum of the elements of the current
// subset equals to desired sum or not
int sum = 0;
for (int j = 0; j < v.size(); ++j)
{
sum += v[j];
}
if (sum == desiredsum)
{
for (int j = 0; j < v.size(); ++j)
{
(j ==
v.size() - 1) ? cout << v[j] << "=" : cout << v[j] << "+";
}
total_soln++;
cout << desiredsum << " " << endl;
}
}
}
cout<<"Total Solutions: "<<total_soln<<endl;
return 0;
}
intmain()
{
INTA[]={1,7,7,4,6,5,5,2,4,7,10,3,9,6};
int n=sizeof(A)/sizeof(A[0]);
int desiredsum=40;
int total_soln=0;
对于(int i=0;i)您的问题是什么?要生成功率集,请使用