Bonjour a tous .
Voila un probleme que je n'arrive pas a resoudre ( je suis un neophyte ) et pardon pour mon francais je suis etranger .
probleme du loto ( non je ne joue pas car cela n'existe pas dans mon pays ) probleme qui devient une obscetion et faut que j'arrete :-)
j'ai un premier programme qui genere toutes les combinaisons C(x,y) par exemple pour 10 je vais en genrer 210 jusqu'a la c'est facile ensuite j'ai un deuxieme programme qui en fonction des combinaisons que je joue me dit combien j'ai de gagnant a 3 ,4 , 5 , 6 numeros .
Le but c'est d'avoir le minimum de combinaisons a jouer pour etre sur d'avoir 5 bon numeros dans au moins une de mes combinaisons si les 6 numeros gagnant sont parmi ma liste par exemple je veux jouer 10 numeros supposons que les 6 numeros gagnants sont parmi mes 10 et bien j'ai trouvé comme mini ( mais on peut descendre plus bas d'ou mon probleme) 18 combinaisons les voici :
1 2 3 4 5 6
1 2 3 4 7 8
1 2 3 4 9 10
1 2 3 5 7 9
1 2 3 5 8 10
1 2 3 6 7 10
1 2 3 6 8 9
1 2 4 5 7 10
1 2 4 5 8 9
1 2 4 6 7 9
1 2 4 6 8 10
1 2 5 6 7 8
1 2 5 6 9 10
1 2 7 8 9 10
3 4 5 6 7 8
3 4 5 6 9 10
3 4 7 8 9 10
5 6 7 8 9 10
vous pouvez verifier que quelque soit la combinaison que vous prenez parmi les 10 j'aurais au moins une de mes 18 combinaisons qui en auras 5 .
ce resultat je l'ai fait a la main avec mon programme verif_combi voila comment je procede je prends d'office la premiere combi soit 1 2 3 4 5 6 que je met dans un fichier ensuite je rajoute la deuxieme et je test dans verif_combi ce que cela donne ( il faut essayer ce programme pour comprendre ) et je continue en essayant toutes les posisibilitées possible le but c'est trouver le minimum de combinaisons qui me donneras comme rsultat combi a 4=0 combi a 3=0 etc... pour que je n'ai que des combi a 5 et a 6 .
mais a la main c'est tres tres long enfin vous imaginez :-)
donc comment faire pour programmer ce genre de chose y a t'il une ame charitable qui pourrais me le faire peut etre avec un algo de type dichtra ( j'ai lu ca quelque part ) car les chemin possible sont enorme .
merci beaucoup de votre aide.
cordialement
PROGRAMME GENERATEUR DE COMBINAISONS:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <stdio.h> // #define nb_boules 8 /* indiquer ici le nombre de numero de votre Loto */ /* Generer toutes les combinaisons du Loto (Francais, donc avec 49 numeros) Le programme va generer un fichier texte contenant 13983816 combinaisons. Compilation : gcc -o Loto49 Loto49.c */ int main(void) { int i,j,k,m,n,p,nb_boules,nb_combi=0,pause; printf("NOMBRE DE BOULES --> "); scanf("%d",&nb_boules); FILE * fichier; /* pointeur sur le fichier de sauvegarde des resultats */ fichier=fopen("combinaisons_brut.txt","w"); /* resultats.txt est le nom du fichier */ printf("Debut du programme\nPatientez...\n\n"); for(i=1;i<=nb_boules-5;i++) for(j=i+1;j<=nb_boules-4;j++) for(k=j+1;k<=nb_boules-3;k++) for(m=k+1;m<=nb_boules-2;m++) for(n=m+1;n<=nb_boules-1;n++) for(p=n+1;p<=nb_boules;p++) { nb_combi++; fprintf(fichier,"%d %d %d %d %d %d\n",i,j,k,m,n,p); /* on ecrit les combinaisons dans le fichier */ } fprintf(fichier,"nombre de combinaisons %d ", nb_combi); fclose(fichier); printf("Le programme a termine. Fin;)\n\n"); printf("nombre de combinaisons %d ", nb_combi); scanf("%d",&pause);; return 0; }
*******************************************************************************************
PROGRAMME VERIFICATION DES COMBINAISONS :
***************************************************************************************
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
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
87
88
89
90
91
92
93
94 #include<fcntl.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <dos.h> #include <time.h> main() { FILE *fichier ; int w=0,z=0,f=0,y=0,u=0,max=0,v=0,numscommuns,cptc=0; float cpt0=0,cpt1=0,cpt2=0,cpt3=0,cpt4=0,cpt5=0,cpt6=0; int i=0,j=0,k=0,l=0,m=0,n=0,zz=0,a=0,nt=0,xx=0,c=0; int x[250][6]; int tab[6]; int tc[6]; int line; float temp_reel=0,temp_ecoule=0; time_t deb_total,fin_total,deb_reel,fin_reel; bool stop; //PARCOUR FICHIER ET CHARGEMENT TABLEAU *************************************** if (fichier =fopen ("Combinaisons.txt", "r")) { //Si ouverture réussie : note le if pour fopen (alors true soit false) while (!feof(fichier)) { for (u=0 ; u<6 ; u++) { if (fscanf (fichier, "%d", &y)==1) { x[w][u] = y; } }//End for u... w++;//Compteur de combinaisons contenues dans le fichier }//End while... fclose (fichier); // fermeture du fichier if (w>0) { printf("Le fichier contient %d ligne(s)\n", w); }//Vérif lignes lues }//End if... else { //Si échec d'ouverture : if fopen retourne false et alors on arrive ici printf("Echec a l'ouverture du fichier.\n"); printf("Appuyez sur n'importe quelle touche pour quitter."); getchar(); exit(0); } // FIN PARCOUR FICHIER ET CHARGEMENT TABLEAU ********************************** printf("Entrez votre nombre de numeros : "); scanf("%d",&nt); //nt=10; printf("\n"); deb_reel=time(NULL); a=nt-5; for(i=1;i<=a;i++) for(j=i+1;j<=a+1;j++) for(k=j+1;k<=a+2;k++) for(l=k+1;l<=a+3;l++) for(m=l+1;m<=a+4;m++) for(n=m+1;n<=a+5;n++) { tc[0]=i;tc[1]=j;tc[2]=k;tc[3]=l;tc[4]=m;tc[5]=n; cptc++; for (z=0, max=0; z<w ;z++) { for (u=0, numscommuns=0; u<6 ; u++) //Comparaison for(xx=0; xx<6; xx++) if(x[z][u]==tc[xx]) { numscommuns++; } if (numscommuns > max) { max = numscommuns; } //Stocker le max trouvé }//End z... if(max==6) { cpt6++; } if(max==5) { cpt5++; } if(max==4) { cpt4++; } if(max==3) { cpt3++; } if(max==2) { cpt2++; } if(max==1) { cpt1++; } if(max==0) { cpt0++; } // printf("progression : %d\r",cptc);//Vérifie la progression en test // getchar(); }//End boucle imbriquée i..n fin_reel=time(NULL); temp_reel=difftime(fin_reel,deb_reel); printf("\r");//Effacer la ligne "progression" printf(" 6 numeros = %g fois\n",cpt6); printf(" 5 numeros = %g fois\n",cpt5); printf(" 4 numeros = %g fois\n",cpt4); printf(" 3 numeros = %g fois\n",cpt3); printf(" 2 numeros = %g fois\n",cpt2); printf(" 1 numeros = %g fois\n",cpt1); printf(" 0 numeros = %g fois\n",cpt0); printf(" TOTAL = %g\n",cpt6+cpt5+cpt4+cpt3+cpt2+cpt1+cpt0); printf("\n"); printf("duree reelle de calcul : %g seconde(s)\n",temp_reel); scanf(" %d ",nt); getchar(); }
Partager