Jak działa ten program?

0

Witam,
może mi ktoś wyjaśnić na jakiej zasadzie działa ten program? Ma on za zadanie liczyć permutacje wskazanego skończonego ciągu.
O co właściwie chodzi przy sprawdzaniu p==1? Czym jest ta zmienna? W pierwszym if wypisujemy w pętli wszystkie liczby od 1 do n. Ale nie wiem co robi kod w else? No i sama funkcja - permutacja? Pomoże ktoś? :-(

 #include <stdio.h>

// n - ostatnia liczba zbioru


void permutacja(int T[], int p, int n) {
	
	if(p==1) {
		int i; // deklaracja zmiennej pomocniczej
		for(i=0; i<n; i++) {
			printf("%d ", T[i]); // wypisz każdą liczbę w linii dopóki nie przekroczy najwiekszej liczby zbioru - n
		}
		printf("\n");
	}
	else {
		int S[n];
		int i;
		for(i=0; i<n; i++)
			S[i]=T[i];
		for(i=0; i<p; i++)
	{
		permutacja(S, p-1, n);
		int t = S[i];
		S[i] = S[p-1];
		S[p-1] = t;
		}
	}		
}

void nazwa(int n)
{
	int T[n];
	int i;
	for(i=0; i<n; i++)
		T[i] = i+1;
	permutacja(T,n,n);
}

main() {

	printf("Podaj ostatnia liczbe zbioru: ");	
	int n;
	scanf("%d", &n);
	nazwa(n);
	
}
0

Strasznie wolno, niepotrzebnie bazgroląc w dodatkowej tablice.

0
int S[n];
  • Normalny kompilator tego by nie przepuscil.
0
_13th_Dragon napisał(a):

Strasznie wolno, niepotrzebnie bazgroląc w dodatkowej tablice.

No trudno, ale działać działa. :)

DamianPrg napisał(a):
int S[n];
  • Normalny kompilator tego by nie przepuscil.

To jak powinno być? :)

0

A może mi chociaż ktoś powiedzieć czym jest zmienna p?

1 użytkowników online, w tym zalogowanych: 0, gości: 1