题目链接:点击打开链接
Backward Digit Sums Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 7004 Accepted: 4072Description
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.#include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,sum; int a[12],ans[12]; bool judge(int a[]) { for(int i=1;i<n;i++) { for(int j=1;j<n-i+1;j++) a[j]=a[j]+a[j+1]; } return a[1]==sum; } int main() { while(~scanf("%d%d",&n,&sum)) { for(int i=1;i<=n;i++) ans[i]=i; while(1) { for(int i=1;i<=n;i++) a[i]=ans[i]; if(judge(a)) { for(int i=1;i<=n;i++) printf(i==n?"%d\n":"%d ",ans[i]); break; } next_permutation(ans+1,ans+n+1); } } return 0; }