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.
Line 1: Two space-separated integers: N and the final sum.
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.
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
#define MAX_N 10
int n,finalsum;
int mat[MAX_N][MAX_N];
int num[MAX_N];
int cal()
{
for(int i=0;i<n;i++)
mat[0][i]=num[i];
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
mat[i+1][j]=mat[i][j]+mat[i][j+1];
}
return mat[n-1][0];
}
int main()
{
scanf("%d%d",&n,&finalsum);
for(int i=0;i<n;i++)
num[i]=i+1;
do
{
int sum=cal();
if(sum==finalsum) break;
}
while(next_permutation(num,num+n));
for(int i=0;i<n-1;i++) printf("%d ",num[i]);
printf("%d\n",num[n-1]);
return 0;
}