思路:
输入n,用DFS来获取全排列,全排列原本输出的地方改成check判断这一种排列是否符合要求
代码:
#include<bits/stdc++.h>
using namespace std;
int check(int len,int a[])
{
if(len == 1)
{
return a[1];
}
for(int i = 1;i < len;i++)
{
a[i] += a[i+1];
}
check(len-1,a);
}
void copy(int x[],int y[])
{
for(int i = 1;i < sizeof(x);i++)
{
y[i] = x[i];
}
}
bool vis[10],flag = false;
int ans[10],sna[10];
int n,o;
void dfs(int cur,int sum)
{
if(flag)
{
return ;
}
if(cur > n)
{
int c[10];
copy(ans,c);
if(check(n,c) == o && !flag)
{
for(int i = 1;i <= n;i++)
{
sna[i] = ans[i];
}
flag = true;
}
}
else
{
for(int i = 1;i <= n;i++)
{
if(!vis[i])
{
vis[i] = true;
ans[cur] = i;
dfs(cur+1,sum);
vis[i] = false;
}
}
}
}
int main()
{
cin>>n>>o;
dfs(1,o);
for(int i = 1;i <= n;i++)
{
cout<<sna[i]<<" ";
}
}