Sunteți pe pagina 1din 3

Programul:

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
int a[10],b[400][10],c[40][10],j=0,n,m,nr,i,k,e,r,l;
int cont(int k) {
In secventa data de program se
verifica daca cifra de
for ( i = 0; i < k; i++)
pe pozitia k nu se mai
intilneste in linia curenta.
if(a[i] == a[k])
return 0;
return 1;
}
void aranj()
{
k = 0;
while(k >= 0)
{
if (k == m )
Cind k=m are loc
formarea matricei b aranjate.
{ for (i = 0; i<m; i++) b[j][i]=a[i]; j++;
k--;
}
else
Se formeaza matricea a[k] care
reprezinta linia si
{
pozitia evaluata.Verificinduse
daca a[k] nu depaseste
if (a[k] <n)
valoarea lui n si totodata ridicind
gradul de pe pozitia k
{ a[k]++;
il verificam prin functia cont
daca acesta nu se
if (cont(k))
intilneste mai inainte. Daca se
intilneste mai inainte
k++;
atunci k ramine acelasi iar a[k]
creste.
}
else
{ a[k] = 0;
k--;
}

}
}
}
void main()
{
clrscr();
printf("n="); scanf("%d",&n);
printf("m="); scanf("%d",&m);
aranj();
clrscr();
printf("Aranjari din %d luate cite %d sunt:\n\n",n,m);
for ( i = 0; i<j; i++){
for ( k = 0; k<m; k++)
printf(" %d ",b[i][k]);
printf("\n");
}
getch();
for (i=0;i<m;i++)
Are loc atribuirea primei linii ale matricei
aranjate in matricea cu
c[0][i]=b[0][i];
combinari.
k=1;l=1;
while(k<j)
{nr=0;
for ( i = 0; i<k; i++)
data nu se intilneste in
{for (int e = 0; e<m; e++)
matricii b.
for (int r = 0; r<m; r++)
if(b[k][e]==b[i][r]) nr+=1;
if(nr<m)
{if(i==k-1)
toate liniile pina la

Se verifica daca combinarea


liniile precedente ale

Se verifica daca au fost parcurse

penultima pozitie.
{for(e=0;e<m;e++) c[l][e]=b[k][e];
Are loc atribuirea matricei c a
combinarii cautate si
l+=1;
si care nu s-a intilnit mai
sus.
}
}
else i=k;

nr=0;
} k+=1;
}
clrscr();
printf("Combinari din %d luate cite %d sunt:\n\n",n,m);
for ( i = 0; i<l; i++){
for ( k = 0; k<m; k++)
printf("
%d ",c[i][k]);
printf("\n");
}
getch();
}

S-ar putea să vă placă și