利用next_permutation函数排列,对于每种排列求出最终的那个和然后判断是否与Input中的final sum相等,若相等,输出此种排列即可。
#include<cstdio>
#include<algorithm>
using namespace std;
int N;
int sum;
int digit[15];
int a[15];
void ini(){
scanf("%d%d", &N, &sum);
for(int i=0; i<N; i++)
digit[i] = i + 1;
}
void search()
{
do {
for(int i=0; i<N; i++){
a[i] = digit[i];
}
int cnt = N;
while(cnt != 1){
for(int i=0; i<cnt-1; i++){
a[i] = a[i] + a[i+1];
}
cnt--;
}
if(a[0] == sum) break;
}while(next_permutation(digit, digit+N));
printf("%d", digit[0]);
for(int i=1; i<N; i++){
printf(" %d", digit[i]);
}
}
int main()
{
ini();
search();
return 0;
}