#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int hasil;
// fungsi factorial :
int factorial (int nilai)
{
hasil = nilai;
while (nilai>1)
{
hasil = hasil * (nilai-1);
nilai = nilai - 1;
}
return hasil;
}
int main(int argc, char *argv[])
{
int p,nq,max,x,i,j,n,k,r,s,tr,no;
int a[100];
div_t xx;
for (i=0;i<100;i++)
{
a[i] = 0;
}
//Tampilan Pembuka
printf("---------------------------\nPROGRAM GENERATE PERMUTASI\n\n");
printf(" Oleh Cumplunk.\n");
printf("---------------------------\n");
//input nilai n (jumlah data < maksimal 100 >)
printf("Masukkan Nilai n : ");
scanf("%d",&n);
//input data ke dalam array
for (i=1;i<=n;i++) //ulangi untuk semua data hingga data ke-n
{
printf("Masukkan Nilai Himpunan a[%d] : ", i);
scanf("%d", &a[i]);
}
//input nilai r
printf("Nilai r : ");
scanf("%d", &tr);
//hitung nilai permutasi
p = factorial(n);
nq = factorial(n-tr);
if (nq==0) nq=1;
max = p/nq;
printf("Nilai Permutasi : %d\n\
Tekan Enter Untuk Melihat Hasil Generate Permutasi...\n", max);
getche(); //fungsi membaca karakter keyboard
no = 1; //variabel untuk menampilkan nomor
//men-generate permutasi dengan
//algoritma generate next-permutation
//generate sebanyak nilai permutasi
for (x=1;x<=max;x++)
{
printf("%3d. ", no);
for (i=1;i<=tr;i++)
printf("%d ", a[i]);
printf("\n", a[i]);
no++;
j = n - 1;
while (a[j] > a[j+1])
j = j - 1; //j adalah subcript terbesar dengan aj < aj+1
k = n;
while (a[j] > a[k])
k = k - 1; //ak adalah integer terkecil dan lebih besar dari aj
//tukar aj dan ak
i = a[k];
a[k] =a[j];
a[j] = i;
r = n;
s = j + 1;
while (r > s)
{
//tukar ar dan as
i = a[r];
a[r] = a[s];
a[s] = i;
r = r - 1;
s = s + 1;
}
}
system("PAUSE");
return EXIT_SUCCESS;
}