输出结果如果有重复,是因为集合S中有重复元素(集合中本应该没有重复的元素,可能是题目问题)
#include<iostream>
#include<iomanip>
using namespace std;
#define WHITE 0
#define GRAY 1
const int n = 5;
const int S[n] = { 2,2,6,5,4 };
int Color[n]{ WHITE };//选中情况,WHITE表示未选中
const int c = 10;
int Count = 0;
void Subsum(int index=0,int sum = 0);
void Show();
int main()
{
Subsum();
return 0;
}
void Subsum(int index,int sum)
{
if (sum == c)
{
Show();
return;
}
if((sum < c)&&(index != n))
{
Color[index] = GRAY;//选中index;
Subsum(index + 1, sum + S[index]);
Color[index] = WHITE;//不选择index;
Subsum(index + 1, sum);
}
return;
}
void Show()
{
cout << "No." << ++Count << ": ";
for (int i = 0; i < n; i++)
if (Color[i] == GRAY)
cout << setw(3) << S[i];
cout << endl;
}