Advertisement
Guest User

Untitled

a guest
Dec 18th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.26 KB | None | 0 0
  1. package Exa2016;
  2.  
  3. public class Etoile {
  4.  
  5. //les chiffres vers le centre de l'étoile c'est le premier nommbre
  6. public static int etoile [][] = {{0,15,0},
  7. {0,0,19},
  8. {0,0,20},
  9. {12,0,6},
  10. {5,0,12}};
  11.  
  12. public static boolean[] marqueur = new boolean[9] ;//dernier c'est le 8 et on part du 1
  13.  
  14. //méthode
  15. public static void resoudreEtoile(int ligne, int colonne){
  16.  
  17. //clause de finitude
  18. if (ligne == 5) {
  19. affiche();
  20. return;
  21. }
  22.  
  23. int[] positionSuivante= positionSuivante(ligne,colonne);
  24.  
  25. int ligneSuivante = positionSuivante[0];
  26. int colonneSuivante = positionSuivante[1];
  27.  
  28. //pas récursif
  29. for (int chiffre = 1; chiffre <= 8 ; chiffre++) { //on test quoi dans les cases ? les nombre de 1 à 8
  30. if(possibleMettreChiffre(chiffre, ligne, colonne)){
  31. placerChiffre(chiffre, true, ligne, colonne); //si on a des marqueurs c'est bine de faire une méthode
  32. resoudreEtoile(ligneSuivante, colonneSuivante); //on peut aussi enlever les int lig... avant et mettre positionSuivante[0] pos..[1]
  33. placerChiffre(chiffre,false, ligne, colonne);
  34.  
  35. }
  36. }
  37.  
  38. }
  39.  
  40.  
  41. public static int [] positionSuivante(int ligne, int colonne){
  42.  
  43. int position[] = new int [2] ; //dans la premiere case ça sera la ligne, la 2e c'est colonne
  44. int ligneSuivante = ligne + (colonne + 1 )/3; // div par 3, 3 c'est la longueur de la ligne. Donne l'indice de la ligne suivante
  45. int colonneSuivante = (colonne +1 )%3; //pour passer à la colonne suivante
  46. position[0] = ligneSuivante;
  47. position[1] = colonneSuivante;
  48.  
  49. //si y a deja un chiffre présent dans la case :
  50. if(ligneSuivante < 5 && etoile[ligneSuivante][colonneSuivante] != 0){
  51. return positionSuivante(ligneSuivante, colonneSuivante); //on rappeler la méthode si il y a deja un chiffre
  52. }
  53. return position;
  54. }
  55.  
  56.  
  57.  
  58. public static boolean possibleMettreChiffre(int chiffre, int ligne, int colonne){
  59.  
  60. //est-ce que notre chiffre à déjà été placé, si oui false
  61. if(marqueur[chiffre] == true){
  62. return false;
  63. }
  64.  
  65. //somme des chiffres <= 25
  66. int sommeLigne=0;
  67. int cptChiffrePlace=0; //cpt de combien de chiffre on était placé dans la ligne
  68.  
  69.  
  70. for (int i = 0; i < etoile[ligne].length; i++) { //traverseer kes colonnes
  71. sommeLigne = sommeLigne + etoile[ligne][i]; //on additionne toutes les valeurs
  72. if(etoile[ligne][colonne] != 0){
  73. cptChiffrePlace++;
  74. }
  75.  
  76. }
  77. if((sommeLigne+chiffre) > 25){
  78. return false;
  79. }
  80.  
  81. //tester si c'est le dernier chiffre qu'on place, le tout doitêtre = à 25
  82. if(cptChiffrePlace == 2){ //si on a deja 2 classes placé dans notre ligne
  83. if((sommeLigne + chiffre) != 25){
  84. return false;
  85. }
  86. }
  87.  
  88. //calculer si le cercle jaune avec les autres nombre dans la ligne jaune font 25
  89. if(colonne == 0){ //si la colonne est à l'indice zéto, on peut déhà calculer les chiffre
  90. int sommeCercle = 0 ;
  91. int cptNbCercle= 0;
  92.  
  93. //traverser toutes les lignes
  94. for (int i = 0; i < etoile.length; i++)
  95. {
  96. sommeCercle = sommeCercle + etoile[i][0] ; //0 car la colonne 0 contient les premiers chiffres qui sont dans la ligne jauen du ccercle
  97. if(etoile[i][0] != 0){ //si la case de la ligne où on est c'est pas zéro, donc il y a un nombre dedans
  98. cptNbCercle++;
  99. }
  100. }
  101. if((sommeCercle + chiffre) > 25){
  102. return false;
  103. }
  104.  
  105. if(cptNbCercle==4){//si on déjà remplit 4 cases du cercle jaune
  106. if((sommeCercle+chiffre) != 25){
  107. return false;
  108. }
  109. }
  110.  
  111. }
  112.  
  113. return true;
  114. }
  115.  
  116.  
  117.  
  118. //méthode pas très efficace, autant le faire en haut
  119. public static void placerChiffre(int chiffre, boolean marque, int ligne, int colonne){
  120.  
  121. int chiffreAplacer = chiffre;
  122.  
  123. if(marque == false){
  124. chiffreAplacer = 0;
  125. }
  126.  
  127. marqueur[chiffre] = marque; //on met soit vrai soit faux dans notre tableau par rapport à ce qu'on a dans les paramètres
  128. etoile[ligne][colonne] = chiffreAplacer; //mettre dans l'étoile
  129.  
  130. //enlever de l'étoile
  131.  
  132. }
  133.  
  134. public static void affiche(){
  135. for (int i = 0; i < etoile.length; i++) {
  136. for (int j = 0; j < etoile[i].length; j++) {
  137. System.out.print(etoile[i][j]+ " ");
  138. }
  139. System.out.println();
  140. }
  141. }
  142.  
  143. public static void main(String[] args) {
  144.  
  145.  
  146. resoudreEtoile(0,0);
  147.  
  148.  
  149. }
  150.  
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement