Moharram
سه شنبه 11 تیر 1387, 16:51 عصر
سلام
چجور میتونم جایگشتهای n شی رو در خروجی print کنم:
مثال : abc-acb و ....
با تشکر
Moharram
چهارشنبه 12 تیر 1387, 11:20 صبح
خودم از روش بازگشتی زیر استفاده کردم، ولی راستش خیلی پیچیده شد(کار به جاهای باریک کشید مثل استفاده از پشته و ...).
خلاصه اینکه بعضی جاها خودم نفهمیدم چیکار کردم ... :گیج::گیج::گیج:
اگه روش آسونتری دارین لطفا پیشنهاد بدین.
#include "stdio.h"
#include "conio.h"
#include "string.h"
#define N 26
void Jaygasht(int n,int m);
void Push(int data);
int Pop(void);
int used[N];
char alphabet[] = {'a','b','c','d','e','f','g','h','i','j','k','l',' m','n','o','p','q','r','s','t','u','v','w','x','y' ,'z'};
char forPrint[N];
int forPrintPointer;
int Stack[50];
int StackPointer = 0;
int globalNumber=0;
void main(void)
{
int num;
printf("Enter number between 1 to 26:");
scanf("%d",&num);
forPrintPointer = 0;
for(int i=0;i<N;i++)
used[i] = 0;
Jaygasht(num,num);
getch();
}
void Jaygasht(int n,int m)
{
for(int i=0;i<n;i++)
{
if(used[i] == 0)
{
if (m == 1)
{
forPrint[forPrintPointer++] = alphabet[i];
forPrint[forPrintPointer++] = '\0';
globalNumber++;
printf("%4d - %s\n",globalNumber,forPrint);
forPrintPointer=0;
break;
}
used[i] = 1;
forPrint[forPrintPointer] = alphabet[i];
Push(forPrintPointer++);
Jaygasht(n,m-1);
forPrintPointer=Pop();
used[i] = 0;
}
}
}
void Push(int data)
{
Stack[StackPointer++] = data;
}
int Pop(void)
{
return Stack[--StackPointer];
}
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.