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了解的少之又少。。。发现好多题都用到STL里的东西 又长知识了:next_permutation()用于全排列http://blog.csdn.net/wconvey/article/details/7459131 coed: #include<cstdio> #include<algorithm> using namespace std; int a[100],b[100]; int main() { int n,sum; while(~scanf("%d%d",&n,&sum)){ for(int i=1;i<=n;i++) a[i]=i; while(next_permutation(a+1,a+n+1)){ for(int i=1;i<=n;i++) b[i]=a[i]; int k=n; while(k--){ for(int i=1;i<=k;i++) b[i]+=b[i+1]; } if(b[1]==sum) break; } for(int i=1;i<=n;i++) printf("%d ",a[i]); printf("\n"); } return 0; }