Correction du TP n°9

Exercice 1

.

/* Auteur: Nicolas JANEY */
/* nicolas.janey@univ-fcomte.fr */
/* Fevrier 2005 */
import java.io.*;
public class JosephusFlavius1 {
static BufferedReader flux = new BufferedReader(new InputStreamReader(System.in));
public static int eliminationJosephusFlavius(int n,int k) {
int pos = 1;
boolean [] mort = new boolean[n];
mort[0] = true;
System.out.println("Mort de "+0);
for ( int i = 1 ; i < n ; i++ )
mort[i] = false;
for ( int i = 0 ; i < n-1 ; i++ ) {
int cpt = 0;
while ( cpt != k ) {
if ( !mort[pos] )
cpt++;
if ( cpt != k )
pos = (pos+1)%n; }
System.out.println("Mort de "+pos);
mort[pos] = true;
pos = (pos+1)%n; }
return((pos+n-1)%n);
}
/* Fonction principale */
public static void main(String [] args) throws IOException {
/* Lecture au clavier du nombre de soldats */
System.out.print("Nombre de soldats : ");
int n = Integer.valueOf(flux.readLine()).intValue();
/* Lecture au clavier du nombre de soldats parcourus */
/* a chaque elimination */
System.out.print("Taille des sauts : ");
int k = Integer.valueOf(flux.readLine()).intValue();
System.out.println("Le dernier soldat etait le numero "
+eliminationJosephusFlavius(n,k));
}
}

JosephusFlavius1.java

.

/* Auteur: Nicolas JANEY */
/* nicolas.janey@univ-fcomte.fr */
/* Fevrier 2005 */
import java.io.*;
public class JosephusFlavius2 {
static BufferedReader flux = new BufferedReader(new InputStreamReader(System.in));
public static int eliminationJosephusFlavius(int n,int k) {
int pos = 0;
boolean [] mort = new boolean[n];
mort[0] = true;
System.out.println("Mort de "+0);
for ( int i = 1 ; i < n ; i++ )
mort[i] = false;
for ( int i = 0 ; i < n-1 ; i++ ) {
int cpt = 0;
do {
pos = (pos+1)%n;
if ( !mort[pos] )
cpt++; }
while ( cpt != k );
System.out.println("Mort de "+pos);
mort[pos] = true; }
return(pos);
}
/* Fonction principale */
public static void main(String [] args) throws IOException {
/* Lecture au clavier du nombre de soldats */
System.out.print("Nombre de soldats : ");
int n = Integer.valueOf(flux.readLine()).intValue();
/* Lecture au clavier du nombre de soldats parcourus */
/* a chaque elimination */
System.out.print("Taille des sauts : ");
int k = Integer.valueOf(flux.readLine()).intValue();
System.out.println("Le dernier soldat etait le numero "
+eliminationJosephusFlavius(n,k));
}
}

JosephusFlavius2.java

.

/* Auteur: Nicolas JANEY */
/* nicolas.janey@univ-fcomte.fr */
/* Fevrier 2005 */
import java.io.*;
public class JosephusFlavius3 {
static BufferedReader flux = new BufferedReader(new InputStreamReader(System.in));
public static int eliminationJosephusFlavius(int n,int k) {
boolean [] mort = new boolean[n];
for ( int i = 1 ; i < n ; i++ )
mort[i] = false;
int pos = 0;
mort[pos] = true;
System.out.println("Mort de "+0);
int morts = 1;
int cpt = 0;
while ( morts != n ) {
pos = (pos+1)%n;
if ( !mort[pos] ) {
cpt++;
if ( cpt == k ) {
System.out.println("Mort de "+pos);
mort[pos] = true;
morts++;
cpt = 0; } } }
return(pos);
}
/* Fonction principale */
public static void main(String [] args) throws IOException {
/* Lecture au clavier du nombre de soldats */
System.out.print("Nombre de soldats : ");
int n = Integer.valueOf(flux.readLine()).intValue();
/* Lecture au clavier du nombre de soldats parcourus */
/* a chaque elimination */
System.out.print("Taille des sauts : ");
int k = Integer.valueOf(flux.readLine()).intValue();
System.out.println("Le dernier soldat etait le numero "
+eliminationJosephusFlavius(n,k));
}
}

JosephusFlavius3.java

Auteur: Nicolas JANEY
UFR Sciences et Techniques
Université de Besançon
16 Route de Gray, 25030 Besançon
nicolas.janey@univ-fcomte.fr