Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Exa2016;
- public class Etoile {
- //les chiffres vers le centre de l'étoile c'est le premier nommbre
- public static int etoile [][] = {{0,15,0},
- {0,0,19},
- {0,0,20},
- {12,0,6},
- {5,0,12}};
- public static boolean[] marqueur = new boolean[9] ;//dernier c'est le 8 et on part du 1
- //méthode
- public static void resoudreEtoile(int ligne, int colonne){
- //clause de finitude
- if (ligne == 5) {
- affiche();
- return;
- }
- int[] positionSuivante= positionSuivante(ligne,colonne);
- int ligneSuivante = positionSuivante[0];
- int colonneSuivante = positionSuivante[1];
- //pas récursif
- for (int chiffre = 1; chiffre <= 8 ; chiffre++) { //on test quoi dans les cases ? les nombre de 1 à 8
- if(possibleMettreChiffre(chiffre, ligne, colonne)){
- placerChiffre(chiffre, true, ligne, colonne); //si on a des marqueurs c'est bine de faire une méthode
- resoudreEtoile(ligneSuivante, colonneSuivante); //on peut aussi enlever les int lig... avant et mettre positionSuivante[0] pos..[1]
- placerChiffre(chiffre,false, ligne, colonne);
- }
- }
- }
- public static int [] positionSuivante(int ligne, int colonne){
- int position[] = new int [2] ; //dans la premiere case ça sera la ligne, la 2e c'est colonne
- int ligneSuivante = ligne + (colonne + 1 )/3; // div par 3, 3 c'est la longueur de la ligne. Donne l'indice de la ligne suivante
- int colonneSuivante = (colonne +1 )%3; //pour passer à la colonne suivante
- position[0] = ligneSuivante;
- position[1] = colonneSuivante;
- //si y a deja un chiffre présent dans la case :
- if(ligneSuivante < 5 && etoile[ligneSuivante][colonneSuivante] != 0){
- return positionSuivante(ligneSuivante, colonneSuivante); //on rappeler la méthode si il y a deja un chiffre
- }
- return position;
- }
- public static boolean possibleMettreChiffre(int chiffre, int ligne, int colonne){
- //est-ce que notre chiffre à déjà été placé, si oui false
- if(marqueur[chiffre] == true){
- return false;
- }
- //somme des chiffres <= 25
- int sommeLigne=0;
- int cptChiffrePlace=0; //cpt de combien de chiffre on était placé dans la ligne
- for (int i = 0; i < etoile[ligne].length; i++) { //traverseer kes colonnes
- sommeLigne = sommeLigne + etoile[ligne][i]; //on additionne toutes les valeurs
- if(etoile[ligne][colonne] != 0){
- cptChiffrePlace++;
- }
- }
- if((sommeLigne+chiffre) > 25){
- return false;
- }
- //tester si c'est le dernier chiffre qu'on place, le tout doitêtre = à 25
- if(cptChiffrePlace == 2){ //si on a deja 2 classes placé dans notre ligne
- if((sommeLigne + chiffre) != 25){
- return false;
- }
- }
- //calculer si le cercle jaune avec les autres nombre dans la ligne jaune font 25
- if(colonne == 0){ //si la colonne est à l'indice zéto, on peut déhà calculer les chiffre
- int sommeCercle = 0 ;
- int cptNbCercle= 0;
- //traverser toutes les lignes
- for (int i = 0; i < etoile.length; i++)
- {
- sommeCercle = sommeCercle + etoile[i][0] ; //0 car la colonne 0 contient les premiers chiffres qui sont dans la ligne jauen du ccercle
- 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
- cptNbCercle++;
- }
- }
- if((sommeCercle + chiffre) > 25){
- return false;
- }
- if(cptNbCercle==4){//si on déjà remplit 4 cases du cercle jaune
- if((sommeCercle+chiffre) != 25){
- return false;
- }
- }
- }
- return true;
- }
- //méthode pas très efficace, autant le faire en haut
- public static void placerChiffre(int chiffre, boolean marque, int ligne, int colonne){
- int chiffreAplacer = chiffre;
- if(marque == false){
- chiffreAplacer = 0;
- }
- marqueur[chiffre] = marque; //on met soit vrai soit faux dans notre tableau par rapport à ce qu'on a dans les paramètres
- etoile[ligne][colonne] = chiffreAplacer; //mettre dans l'étoile
- //enlever de l'étoile
- }
- public static void affiche(){
- for (int i = 0; i < etoile.length; i++) {
- for (int j = 0; j < etoile[i].length; j++) {
- System.out.print(etoile[i][j]+ " ");
- }
- System.out.println();
- }
- }
- public static void main(String[] args) {
- resoudreEtoile(0,0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement