Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //**************************************
- // Name: Kombinasi
- // Description:mencari kombinasi dari deretan huruf yang diberikan.
- // panjang string adalah angka yang akan dicari kombinasinya.
- // juga ditampilkan hasil kombinasinya dari deretan huruf yang diberikan
- //
- // Inputs:Kata'pesta' sebagai contohnya
- //
- //**************************************
- #include <iostream>
- using namespace std;
- #include <string.h>
- #include <stdio.h>
- // [1]
- unsigned long fact(unsigned long); // cari angka faktorial
- void swap(int[], int, int);
- void display(int[], char[]);
- void Add(int[], int);
- int main()
- {
- int j, k, n;
- unsigned long i;
- char str[] = "pesta";
- n = strlen(str);
- int *key = new int[n + 1];
- key[0] = n;
- for (i = 1; i <= key[0]; i++)
- key[i] = i;
- display(key, str);
- swap(key, key[0], key[0] - 1);
- display(key, str);
- // [2]
- for (i = 3; i <= fact(key[0]); i += 2)
- {
- for (j = key[0] - 1; j >= 0; j--)
- {
- if ((i - 1) % fact(j) == 0)
- {
- Add(key, key[0] - j);
- for (k = 1; k <= key[0] - j - 1; k++)
- if (key[k] == key[key[0] - j])
- {
- Add(key, key[0] - j);
- k = 0;
- }
- }
- }
- display(key, str);
- swap(key, key[0], key[0] - 1);
- display(key, str);
- }
- cout
- << "\nTotal no: dari kombinasi = " << key[0] << "! = " << i - 1;
- cin.get();
- // return 0;
- }
- unsigned long
- fact(unsigned long f)
- {
- return f == 0 ? 1 : f * fact(f - 1);
- }
- void swap(int k[], int a, int b)
- {
- int t = k[a];
- k[a] = k[b];
- k[b] = t;
- }
- void display(int k[], char s[])
- {
- // [3]
- for (int i = 1; i <= k[0]; i++)
- cout << s[k[i] - 1];
- cout << '\t';
- }
- void Add(int k[], int i)
- {
- k[i]++;
- if (k[i] == k[0] + 1)
- k[i] = 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement