#include<iostream>
#include<algorithm>
using namespace std;
int main()//思想就是把1234的所有排列列出来,符合相邻相加等于sum的就输出
{
int n,sum;
cin>>n>>sum;
int A[100]={0};
int B[100]={0};
for(int i=0;i<n;i++)
{
A[i]=i+1;
}
/*while(next_permutation(A,A+n))//必须从数组的第一个下标开始吗?为啥 next_permutation(A+1,A+n)就不行
{for(int i=0;i<n;i++)
cout<<A[i];
cout<<endl;
}*/
int j=n;
int k=0;
do{//判断一直相邻相加等于num;
for(int i=0;i<n;i++)
{
B[i]=A[i];
//cout<<B[i];
}
while(j>1){//计算一个排列的相邻和
for(int i=0;i<j-1;i++)//每一次相邻相加就减少一个元素
{
B[i]=B[i]+B[i+1];
//cout<<B[i]<<endl;
}
j--;
}
j=n;
if(B[0]==sum)
{
/*for(int i=0;i<n;i++)
cout<<A[i];*/
k=1;
break;
}
}while(next_permutation(A,A+n));//函数求下一个较大的排列
if(k==1){
for(int i=0;i<n;i++)
cout<<A[i]<<" ";}
return 0;
}
数字游戏蓝桥杯算法训练
最新推荐文章于 2024-07-08 22:12:26 发布