描述
FJ和他的牛喜欢玩一个心理游戏。 它们以特定的顺序从1到N(1≤N≤10)写下数字,然后对相邻的数字求和,以产生具有较少数字的新列表。他们重复,直到只剩下一个数字。例如,游戏的一个实例(当N = 4时)可能如下:
3 1 2 4
4 3 6
7 9
16
在FJ后面,牛已经开始玩一个更困难的游戏,他们试图确定从最后的总数和数字N的起始顺序。不幸的是,游戏有点超过FJ的心理算术能力。
写一个程序,以帮助FJ玩游戏,跟上牛。
输入
行1:两个空格分隔的整数:N和最后的和。
输出
行1:导致给定和的整数1..N的排序。 如果有多个解决方案,请选择字母数字最小的一个,即首先放较小的数字。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int m;
int n;
cin>>m>>n;
int a[m];
for(int i=0;i<m;i++)
{
a[i]=i+1;
}
int b[m];
do{
for(int i=0;i<m;i++)
{
b[i]=a[i];
}
for(int j=m;j>1;j--)
{
for(int i=0;i<j-1;i++)
{
a[i]=a[i]+a[i+1];
}
}
/*
for(int i=0;i<m;i++)
{
cout<<b[i]<<" ";
}
cout<<endl<<a[0]<<endl;*/
if(a[0]==n)
{
for(int i=0;i<m;i++)
{
cout<<b[i]<<" ";
}
break;
}
for(int i=0;i<m;i++)
{
a[i]=b[i];
}
}while(next_permutation(a,a+m));
/*
for(int i=0;i<m;i++)
{
cout<<a[i]<<" ";
}*/
return 0;
}