Witam, mam do zrobienia program który wypisuje wszystkie permutacje zadanych n liczb z zakresu 1-9 (początkowych naturalnych). Niestety przy wprowadzeniu tablicy dynamicznej mam problem... Za każdym razem wyświetla mi tylko 1 i program się kończy... czy ktoś miałby może jakieś wskazówki co robię źle? :)
// permutacja.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
void permutacja(int t[], int max);
void wypisz(int t[], int max);
long silnia(int n) {
int i;
long tmp=1;
for(i=2;i<=n;i++)
tmp*=i;
return tmp;
}
int main(void)
{
int *t;
int n=0;
for(n=0;n==0;)
{
fflush(stdin);
printf("Podaj n:");
scanf("%i",&n);
if (n==0)
{
printf("Blad, podaj wartosc z przedzialu 1-9");
}
}
t = new int[n];
for(int x=0;x<=n;x++)
{
t[x]=x+1;
}
int MAX=sizeof(t)/sizeof(t[0]);
int i, j;
wypisz(t, MAX);
for (i = 0; i < silnia(MAX) -1 ; i++) {
permutacja(t, MAX);
wypisz(t, MAX);
}
return 0;
}
/* permutacja: generuje nastepnik permutacyjny dla zadanego szeregu
liczb
*/
void permutacja(int t[], int max)
{
int i, j, k;
if (max < 2)
return;
/* wyznaczanie pierwszego od prawej elementu
* mniejszego niz jego sasiad z prawej strony
*/
i = max - 1;
while ((i > 0) && (t[i - 1] >= t[i]))
i--;
/* wyznaczanie elementu wiekszego od znalezionego */
if (i > 0) {
j = max;
while ((j > 0) &&(t[j - 1] <= t[i - 1]))
j--;
}
/* zamiana miejscami dwoch znalezionych wyzej elementow */
if ((i > 0) && (j > 0)) {
k = t[i - 1];
t[i - 1] = t[j - 1];
t[j - 1] = k;
}
/* odbicie lustrzane szeregu elementow od indeksu i+1 do konca
tablicy
*/
for (i++, j = max; i < j; i++, j--) {
k = t[i - 1];
t[i - 1] = t[j - 1];
t[j - 1] = k;
}
}
/* wypisz: wypisuje zawartosc tablicy
*/
void wypisz(int t[], int max)
{
int i;
for (i = 0; i < max; i++)
printf("%d%c", t[i], (i < max - 1) ? ' ' : '\n');
}
Dziękuję :)