zhber 有好多做过的题没写下来，如果我还能记得就补吧

## 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.

4 16

## Sample Output

3 1 2 4

OUTPUT DETAILS:

There are other possible sequences, such as 3 2 1 4, but 3 1 2 4
is the lexicographically smallest.

3 1 2 4

4 3 6

7 9

16

next_permutation自动生成当前全排列的下一项

#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
int a[20],wrk[20];
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)a[i]=i;
do
{
for (int i=1;i<=n;i++)wrk[i]=a[i];
for (int i=1;i<n;i++)
for (int j=1;j<=n-i;j++)
wrk[j]+=wrk[j+1];
if (wrk[1]==m)
{
for (int i=1;i<=n;i++)
{
printf("%d",a[i]);
if (n-i) printf(" ");else printf("\n");
}
return 0;
}
}
while (next_permutation(a+1,a+n+1));
return 0;
}


posted on 2014-07-31 22:23  zhber  阅读(122)  评论(0编辑  收藏  举报