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