找出所有可能的k个数字的组合,加起来为n,因为只能使用1到9的数字,而每个组合应该是唯一的一组数字。
注意:
- 所有的数字都是正整数。
- 该解决方案集不能包含重复的组合
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include<algorithm>
using namespace std;
int k,n,su=0,sum=0,g=1,suu,b=1;
int visit[11],visit1[11];
int s[10];
void m(int p,int sum)
{
if(p>k)
{
if(sum==n)
{suu=0;
for(int i=1;i<=k;i++)
{
suu=suu+visit1[s[i]];
}
if(suu<k)
{
for(int o=1;o<=k;o++)
{
cout<<s[o]<<' ';
visit1[s[o]]=1;
}
cout<<endl;}
}
return ;
}
else
{
for(int i=1;i<=9;i++)
{
if(!visit[i])
{
if(sum>n)
break;
s[p]=i;
visit[i]=1;
m(p+1,sum+i);
visit[i]=0;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
cin>>k>>n;
m(1,0);
return 0;
}
通过回溯法便利全排列,之后去重,