Description
FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N <= 10) in a certain order and then sum adjacent numbers to produce a new list with one fewer number. They repeat this until only a single number is left. For example, one instance of the game (when N=4) might go like this: 3 1 2 4 4 3 6 7 9 16 Behind FJ's back, the cows have started playing a more difficult game, in which they try to determine the starting sequence from only the final total and the number N. Unfortunately, the game is a bit above FJ's mental arithmetic capabilities. Write a program to help FJ play the game and keep up with the cows.Input
Line 1: Two space-separated integers: N and the final sum.Output
Line 1: An ordering of the integers 1..N that leads to the given sum. If there are multiple solutions, choose the one that is lexicographically least, i.e., that puts smaller numbers first.Sample Input
4 16Sample Output
3 1 2 4Hint
Explanation of the sample: There are other possible sequences, such as 3 2 1 4, but 3 1 2 4 is the lexicographically smallest. STL库函数: #include<algorithm> next_permutation(a,a+n);//对数组a[n]按字典序从小到大全排列,返回值bool类型; #include<iostream> #include<cstdio> #include<string.h> #include<algorithm> using namespace std; int main() { int t,N,sum; //scanf("%d%d",&t,&n); while(scanf("%d%d",&N,&sum)!=EOF) { int a[25],b[25]; int ans=0,n=N-1; for(int i=1;i<=10;i++) { b[i]=i;a[i]=i; } while(n--) { for(int i=1;i<=n+1;i++) { b[i]=b[i]+b[i+1]; } } ans=b[1]; if(ans!=sum) { while(next_permutation(a+1,a+1+N)) { n=N-1; for(int i=1;i<=N;i++) b[i]=a[i]; while(n--) { for(int i=1;i<=n+1;i++) { b[i]=b[i]+b[i+1]; } } ans=b[1]; if(ans==sum) break; } } for(int i=1;i<=N;i++) { if(i==1) printf("%d",a[i]); else printf(" %d",a[i]); } printf("\n"); } return 0; }