Advertisement
alvinfnaldi

comb2.cpp

Apr 26th, 2020
527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1. //**************************************
  2. // Name: Kombinasi
  3. // Description:mencari kombinasi dari deretan huruf yang diberikan.
  4. //        panjang string adalah angka yang akan dicari kombinasinya.
  5. //        juga ditampilkan hasil kombinasinya dari deretan huruf yang diberikan
  6. //
  7. // Inputs:Kata'pesta' sebagai contohnya
  8. //
  9. //**************************************
  10.  
  11. #include <iostream>
  12. using namespace std;
  13. #include <string.h>
  14. #include <stdio.h>
  15.  
  16. // [1]
  17. unsigned long fact(unsigned long); // cari angka faktorial
  18. void swap(int[], int, int);
  19. void display(int[], char[]);
  20. void Add(int[], int);
  21. int main()
  22.  
  23. {
  24.     int j, k, n;
  25.     unsigned long i;
  26.     char str[] = "pesta";
  27.     n = strlen(str);
  28.     int *key = new int[n + 1];
  29.     key[0] = n;
  30.  
  31.     for (i = 1; i <= key[0]; i++)
  32.         key[i] = i;
  33.     display(key, str);
  34.     swap(key, key[0], key[0] - 1);
  35.     display(key, str);
  36.  
  37.     // [2]
  38.     for (i = 3; i <= fact(key[0]); i += 2)
  39.  
  40.     {
  41.         for (j = key[0] - 1; j >= 0; j--)
  42.  
  43.         {
  44.             if ((i - 1) % fact(j) == 0)
  45.  
  46.             {
  47.                 Add(key, key[0] - j);
  48.                 for (k = 1; k <= key[0] - j - 1; k++)
  49.                     if (key[k] == key[key[0] - j])
  50.  
  51.                     {
  52.                         Add(key, key[0] - j);
  53.                         k = 0;
  54.                     }
  55.             }
  56.         }
  57.         display(key, str);
  58.         swap(key, key[0], key[0] - 1);
  59.         display(key, str);
  60.     }
  61.     cout
  62.         << "\nTotal no: dari kombinasi = " << key[0] << "! = " << i - 1;
  63.     cin.get();
  64. //    return 0;
  65. }
  66. unsigned long
  67. fact(unsigned long f)
  68.  
  69. {
  70.     return f == 0 ? 1 : f * fact(f - 1);
  71. }
  72. void swap(int k[], int a, int b)
  73.  
  74. {
  75.     int t = k[a];
  76.     k[a] = k[b];
  77.     k[b] = t;
  78. }
  79. void display(int k[], char s[])
  80.  
  81. {
  82.     // [3]
  83.     for (int i = 1; i <= k[0]; i++)
  84.     cout << s[k[i] - 1];
  85.     cout << '\t';
  86. }
  87. void Add(int k[], int i)
  88.  
  89. {
  90.     k[i]++;
  91.     if (k[i] == k[0] + 1)
  92.         k[i] = 1;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement