1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
import algorea.Scanner;
class Main
{
static Scanner entree = new Scanner(System.in);
static int nbIterations(int n)
{
int result = (int) Math.pow(2,n+1);
if ( n % 2 == 0 ) result -= 2;
else result -= 1;
result = (int) result / 3;
return result;
}
static boolean paire(int n)
{
return (n % 2 == 0);
}
static int lastOne(byte[] bague)
{
int n = bague.length;
for (int i=n-1; i>=0; i--)
if ( bague[i] == 1 )
return i;
return 0;
}
public static void main(String[] args)
{
// Lecture première ligne
int n = entree.nextInt();
int nbIterations = nbIterations(n);
boolean paire = paire(n);
// Initialisation bague = 1 1 1 1 1
byte[] bague = new byte[n];
for (int i=0; i<n; i++)
bague[i] = 1;
//System.out.println( paire );
//System.out.println( bague[0] + " " + bague[1] + " " + bague[2] + " " + bague[3] );
nbIterations = nbIterations/2;
if ( !paire )
{
System.out.println( 1 );
if ( bague[n-1] == 1)
bague[n-1] = 0;
else
bague[n-1] = 1;
//paire = false;
}
for (int iter = 0; iter <nbIterations; iter++ )
{
// pair
int lastOne = n;
do
{
lastOne--;
} while (bague[lastOne]==0);
System.out.println( n-lastOne+1 );
if ( bague[ lastOne-1 ] == 1)
bague[ lastOne-1 ] = 0;
else
bague[ lastOne-1 ] = 1;
// impair
System.out.println( 1 );
if ( bague[n-1] == 1)
bague[n-1] = 0;
else
bague[n-1] = 1;
//paire = false;
//}
//System.out.println( bague[0] + " " + bague[1] + " " + bague[2] + " " + bague[3] );
}
}
} |
Partager