Advertisement
ed_edwardaj

Untitled

Jan 17th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <time.h>
  5. using namespace std;
  6. #define IdxMin 0
  7. #define IdxMax 4
  8. char ArrOp[IdxMax]; /* Berisi Array Operator + - / * () */
  9. double ArrNum[IdxMax]; /* Berisi Array yang akan dimasukkan pada program */
  10.  
  11. void InitArrOp () { /* Inisialiasi ArrOp */
  12.   ArrOp[0] = '*';  ArrOp[1] = '+';  ArrOp[2] = '/';  ArrOp[3] = '-';
  13. }
  14.  
  15. void InitArrNum() { /* Inisialisasi ArrNum */
  16.   for (int i = IdxMin ; i < IdxMax ; ++i)
  17.     cin >> ArrNum[i];
  18. }
  19.  
  20. double HslOp (char op, double a, double b) { /* Fungsi empat operasi aritmatika yang digunakan pada program utama */
  21.   if (op == '+') return (double)a+b;
  22.   else if (op == '-') return (double)a-b;
  23.   else if (op == '/') {
  24.     if (b != 0) return (double)a/b;
  25.   }
  26.   else if (op == '*') return (double)a*b;
  27. }
  28.  
  29. int main () {
  30.   int i,j,k ; int no = 0; int Hsl = 24; double EPS = 0.0000000001; // EPS digunakan untuk membandingkan double dengan 24 (Hsl), karena menyangkut presisi
  31.   InitArrOp();
  32.   cout << "Masukkan empat buah angka yang Anda mau!" << endl;  InitArrNum();
  33.   clock_t Mulai = clock(); //Waktu Dimulai
  34.   sort(ArrNum, ArrNum+4); // Karena next_permutation mengembalikan hasil sampai 4 angka terurut dari besar ke kecil, maka 4 angka harus disort dari kecil ke besar
  35.   cout << "Solusi (menghasilkan 24):" << endl;
  36.   do {
  37.     for (i = IdxMin ; i < IdxMax ; i++) { // Mengenerate semua kemungkinan operator di posisi pertama
  38.       for (j = IdxMin ; j < IdxMax ; j++) { // Mengenerate semua kemungkinan operator di posisi kedua
  39.         for (k = IdxMin; k < IdxMax ; k++) { // Mengenerate semua kemungkinan operator di posisi ketiga
  40.           if (fabs(HslOp(ArrOp[k], (HslOp(ArrOp[j], (HslOp(ArrOp[i],ArrNum[0], ArrNum[1])), ArrNum[2])), ArrNum[3]) -Hsl) <= EPS) { // ((a op b) op c) op d
  41.             no++; //Jumlah solusi bertambah 1.
  42.             cout << no << " "<< "((" << ArrNum[0] << ArrOp[i] <<  ArrNum[1] << ")" << ArrOp[j]  << ArrNum[2] << ")" << ArrOp[k] << ArrNum[3] << endl;
  43.           }
  44.           if (fabs(HslOp(ArrOp[k], (HslOp( ArrOp[i], ArrNum[0], (HslOp(ArrOp[j],ArrNum[1], ArrNum[2])) ) ) , ArrNum[3])- Hsl) <= EPS) { // (a op (b op c)) op d
  45.             no++;
  46.             cout << no << " "<< "(" << ArrNum[0] << ArrOp[i] << "("  << ArrNum[1]  << ArrOp[j]  << ArrNum[2] << "))" << ArrOp[k] << ArrNum[3] << endl;
  47.           }
  48.           if (fabs(HslOp(ArrOp[j],HslOp(ArrOp[i], ArrNum[0], ArrNum[1]), HslOp(ArrOp[k], ArrNum[2], ArrNum[3])) - Hsl ) <= EPS) { // (a op b) op (c op d)
  49.             no++;
  50.             cout << no << " "<< "(" << ArrNum[0] << ArrOp[i]   << ArrNum[1]  << ")" << ArrOp[j]  << "(" << ArrNum[2] << ArrOp[k] << ArrNum[3] << ")" << endl;
  51.           }
  52.           if (fabs(HslOp(ArrOp[i],ArrNum[0],HslOp(ArrOp[k],HslOp(ArrOp[j],ArrNum[1],ArrNum[2]), ArrNum[3])) - Hsl) <= EPS) { // a op ((b op c) op d)
  53.             no++;
  54.             cout << no <<" " << ArrNum[0] << ArrOp[i] << "(("  << ArrNum[1]  << ArrOp[j]  << ArrNum[2] << ")" << ArrOp[k] << ArrNum[3] << ")" << endl;
  55.           }
  56.           if (fabs(HslOp(ArrOp[i],ArrNum[0],HslOp(ArrOp[j],ArrNum[1],HslOp(ArrOp[k], ArrNum[2],ArrNum[3]))) - Hsl) <= EPS) { // a op (b op (c op d))
  57.             no++;
  58.             cout << no <<" " << ArrNum[0] << ArrOp[i] << "("  << ArrNum[1]  << ArrOp[j]  << "("  <<  ArrNum[2]  << ArrOp[k] << ArrNum[3] << "))" << endl;
  59.           } // Terdapat lima buah if-condition yang berguna untuk meletakkan semua kemungkinan '(' dan ')'
  60.         }
  61.       }
  62.     }
  63.   } while (next_permutation(ArrNum, ArrNum+4)); // Mengenerate semua kombinasi (urutan) dari empat angka yang dimasukkan
  64.   if (no == 0) cout << "Tidak Ada Solusi" << endl;
  65.   printf("Waktu Berjalan : %.2fs\n", (double)(clock() - Mulai)/CLOCKS_PER_SEC); //Waktu Berjalan
  66.   return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement