题目链接:点击打开链接
题目大意:给一个数字n和一个sum,让你对1~n的数列进行任意排列位置,使得其通过杨辉三角变换后剩下的那个数字和sum相等,需要求出符合题目要求的排列顺序。
解题思路:其实如果不知道有这个函数的话应该挺麻烦的吧,如果知道了那这题就很简单了,先初始化一个1~n的数组,然后用do while进行全排列,查到符合要求的以后输出数组然后退出do while,还真别说特别好用。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
int n,sum,a[11][11];
while(~scanf("%d%d",&n,&sum)){
for(int i=1;i<=n;i++){
a[1][i]=i;
}
do{
for(int i=2;i<=n;i++){
for(int j=1;j<=n-i+1;j++){
a[i][j]=a[i-1][j]+a[i-1][j+1];
}
}
if(a[n][1]==sum){
for(int i=1;i<=n;i++){
printf("%d",a[1][i]);
if(i!=n){
printf(" ");
}
else{
printf("\n");
}
}
break;
}
}while(next_permutation(a[1]+1,a[1]+n+1));
}
return 0;
}