Time Limit: 0.5 Seconds Memory Limit: 65536K
Total Runs: 348 Accepted Runs: 200
The magician shuffles a small pack of cards, holds it face down and performs the following procedure:
- The top card is moved to the bottom of the pack. The new top card is dealt face up onto the table. It is the Ace of Spades.
- Two cards are moved one at a time from the top to the bottom. The next card is dealt face up onto the table. It is the Two of Spades.
- Three cards are moved one at a time ...
- This goes on until the nth and last card turns out to be the n of Spades.
This impressive trick works if the magician knows how to arrange the cards beforehand (and knows how to give a false shuffle). Your program has to determine the initial order of the cards for a given number of cards, 1 ≤ n ≤ 13.
Input specifications
On the first line of the input is a single positive integer, telling the number of test cases to follow. Each case consists of one line containing the integer n.
Output specifications
For each test case, output a line with the correct permutation of the values 1 to n, space separated. The first number showing the top card of the pack, etc ...
Sample input
2 4 5
Output for sample input
2 1 4 3 3 1 4 5 2
Source: Nordic Collegiate Contest 2006
#include < string >
using namespace std;
string str[ 14 ];
int t,n;
int main()
{
cin >> t;
str[ 1 ] = " 1 " ;
str[ 2 ] = " 2 1 " ;
str[ 3 ] = " 3 1 2 " ;
str[ 4 ] = " 2 1 4 3 " ;
str[ 5 ] = " 3 1 4 5 2 " ;
str[ 6 ] = " 4 1 6 3 2 5 " ;
str[ 7 ] = " 5 1 3 4 2 6 7 " ;
str[ 8 ] = " 3 1 7 5 2 6 8 4 " ;
str[ 9 ] = " 7 1 8 6 2 9 4 5 3 " ;
str[ 10 ] = " 9 1 8 5 2 4 7 6 3 10 " ;
str[ 11 ] = " 5 1 6 4 2 10 11 7 3 8 9 " ;
str[ 12 ] = " 7 1 4 9 2 11 10 8 3 6 5 12 " ;
str[ 13 ] = " 4 1 13 11 2 10 6 7 3 5 12 9 8 " ;
while (t -- )
{
cin >> n;
cout << str[n] << endl;
}
return 0 ;
}