题目大意:
1.输入N,找到由1-N组成的数列,把相邻两个数相加组成一个新的数组,直到这个数组只剩下一个值并且这个值等于给定的K。
思路:
这里可以用到一个非常好用的函数,名字叫next_permutation先来看一个简单的应用
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int d[10];
int n;
cin>>n;
for(int i=0;i<n;i++)
d[i]=i+1;
do
{
for(int i=0;i<n;i++)
cout<<d[i]<<" ";
cout<<endl;
}while(next_permutation(d,d+n));
}
next_permutation函数有两个参数,要进行全排列的数组的头指针和尾指针,一般直接写函数名和函数名+要全排列的数量就好了
使用这个函数这道题剩下的部分就很简单了,双重循环,把两个数加起来存到第一个数的位置(因为第一个数对后来的计算不影响,所以可以这么存)。
接下来上代码。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,sum,m;
int b[11];
int a[11];
int main()
{
cin>>n>>m;
int i,j;
for(i=0;i<n;i++)
b[i]=i+1;
do
{
for(i=0;i<n;i++)
a[i]=b[i];
for(i=n;i>1;i--)
{
for(j=0;j<i-1;j++)
{
a[j]=a[j]+a[j+1];
}
}
if(a[0]==m)
{
for(i=0;i<n;i++)
printf("%d ",b[i]);
printf("\n");
break;
}
}while(next_permutation(b,b+n));
return 0;
}