Salut a tous et merci pour lire ma question!
Je veux afficher sur l'ecran toutes les combinaisons de 16(a mon cas n=16) pris par 2 (p=2) en utilisant le langage C.
Combinaisons de n (ou n=16) pris par p ou p=2.
Le nombre des combinaisons j'ai calcule ils sont 120 ce n'est pas ici le probleme.
Le probleme c'est quand je veux afficher les combinaisons .
Je vous donne ici tous mon code:
Je n'ai pas d'erreurs de syntaxe ca genere les combinaisons de 16 pris par 2 quand je lis n=16 et p=2.
Code : 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 #include<stdio.h> #include<iostream.h> #include<conio.h> typedef int sir[100]; sir x; int p,i,k,n; int as,ev; sir a; void succ(sir x,int k,int &as) {if(x[k]<n) {as=1; x[k]=x[k]+1; } else as=0; } void valid(sir x, int k, int &ev) {ev=1; if((k>1) && !(a[x[k]]>a[x[k-1]])) ev=0; } void afis(sir x, int k) {int i; for(i=1;i<=k;i++) cout<<a[x[i]]<<" "; cout<<endl; } main() {cout<<"n=";cin>>n; for(i=1;i<=n;i++) cin>>a[i]; cout<<"p=";cin>>p; k=1; x[k]=0; while(k>0) { do {succ(x,k,as); if(as) valid(x,k,ev); } while(as && !ev); if(as) if(k==p) afis(x,k); else {k=k+1; x[k]=0; } else k=k-1; } getche(); } }
Ce que je veux c'est lister les combinaisons sans lire n et p.
Voila ce que j'ai essaye:
Les modifications faits a partir du code1:
Code : 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 //Generarea combinarilor #include<stdio.h> #include<conio.h> #include<math.h> #include<iostream.h> //combinari de 16 luate cate2 typedef int sir[120]; sir st; sir a; int k,as,ev,n=16,p=2,nr; void init() //functia de initializare { st[k]=0; } int succesor() //functia de succesor { if (st[k]<n) { st[k]=st[k]+1; as=1; } else as=0; return as; } void afis(int st[50], int k) //functia de afisare a combinarilor {int i; for(i=1;i<=k;i++) cout<<a[st[i]]<<" "; nr=nr+1; } void valid(sir st, int k, int &ev) {ev=1; if((k>2) && !(a[st[k]]>a[st[k-1]])) ev=0; } int sol(int k) //solutia care afiseaza combinarile { return (k==p); } void back() //functia back de generare a combinarilor - combinarile sunt stocate in vectorul st[120] { int i,a; k=1; init(); do { a=succesor(); if (a) valid(st,k,ev); } while (k==1); while (as&&!ev); if (a) { if (sol(k)) { afis(st,k); } else { k=k+1; init(); } } else k=k-1; } void main() { nr=0; clrscr(); //printf("Combinari:"); //scanf("%d",&n); //printf("luate cate:"); //scanf("%d",&p); back(); printf("nr");scanf("%d",nr); getch(); }
(j'ai pris une variable nr j'ai modifier la fonction afisare (affichage) nr=nr+1 et j'ai donne n=16 et p=2.
Mais ca n'a pas l'air a marcher(code2). Pourquoi?
Partager