Advertisement
Pavle_nis

C++ Application1

Dec 9th, 2017
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.83 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <conio.h>
  4.  
  5. using namespace std;
  6.  
  7. class Solution {
  8. public:
  9.     long value1[16];
  10.     char operation[16];
  11.     long value2[16];
  12.     long result[16];
  13. };
  14.  
  15. long plateini[16] = { 1,3,3,7,10,5 };
  16. long result = 999;
  17.  
  18. long bestdistance;
  19. int bestlevel;
  20.  
  21. long plate[16][16];
  22.  
  23. Solution savesolution;
  24. Solution bestsolution;
  25.  
  26.  
  27. void affichesolution(int l)
  28. {
  29.     int i;
  30.  
  31.     cout << "******************\n";
  32.     for (i = 6; i>l; i--)
  33.         cout << bestsolution.value1[i] << bestsolution.operation[i] << bestsolution.value2[i] << "=" << bestsolution.result[i] << endl;
  34.     cout << "******************\n";
  35. }
  36.  
  37. void calculate(int l)
  38. {
  39.     int i, j, k, n;
  40.     long plate1, plate2;
  41.     long distance;
  42.     long r;
  43.  
  44.     distance = result - plate[l][0];
  45.     if (distance<0)
  46.         distance = -distance;
  47.     if (distance <= bestdistance)
  48.     {
  49.         if (distance<bestdistance)
  50.         {
  51.             bestdistance = distance;
  52.             bestsolution = savesolution;
  53.             bestlevel = l;
  54.             if (distance == 0)
  55.             {
  56.                 affichesolution(l);
  57.             }
  58.         }
  59.         else  // (distance==bestdistance)
  60.         {
  61.             if (l>bestlevel)
  62.             {
  63.                 bestsolution = savesolution;
  64.                 bestlevel = l;
  65.                 if (distance == 0)
  66.                     affichesolution(l);
  67.             }
  68.         }
  69.     }
  70.  
  71.     if (l == 1)
  72.         return;
  73.  
  74.     for (i = 0; i<l - 1; i++)
  75.     {
  76.         for (j = i + 1; j<l; j++)
  77.         {
  78.             plate1 = plate[l][i];    
  79.             plate2 = plate[l][j];  
  80.  
  81.  
  82.             n = 1;
  83.             for (k = 0; k<l; k++)
  84.             {
  85.                 if (k != i && k != j)
  86.                 {
  87.                     plate[l - 1][n] = plate[l][k];
  88.                     n++;
  89.                 }
  90.             }
  91.  
  92.             plate[l - 1][0] = plate1 + plate2;
  93.             savesolution.value1[l] = plate1;
  94.             savesolution.operation[l] = '+';
  95.             savesolution.value2[l] = plate2;
  96.             savesolution.result[l] = plate[l - 1][0];
  97.             calculate(l - 1);
  98.             if (plate1 != 1 && plate2 != 1)
  99.             {
  100.                 plate[l - 1][0] = plate1*plate2;
  101.                 savesolution.operation[l] = '*';
  102.                 savesolution.result[l] = plate[l - 1][0];
  103.                 calculate(l - 1);
  104.  
  105.                 if (plate1 >= plate2)
  106.                 {
  107.                     plate[l - 1][0] = plate1 - plate2;
  108.                     if (plate[l - 1][0] != 0)
  109.                     {
  110.                         savesolution.operation[l] = '-';
  111.                         savesolution.result[l] = plate[l - 1][0];
  112.                         calculate(l - 1);
  113.                     }
  114.                     r = plate1%plate2;
  115.                     if (r == 0)
  116.                     {
  117.                         plate[l - 1][0] = plate1 / plate2;
  118.                         savesolution.operation[l] = '/';
  119.                         savesolution.result[l] = plate[l - 1][0];
  120.                         calculate(l - 1);
  121.                     }
  122.                 }
  123.                 else
  124.                 {
  125.                     plate[l - 1][0] = plate2 - plate1;
  126.                     savesolution.value1[l] = plate2;
  127.                     savesolution.operation[l] = '-';
  128.                     savesolution.value2[l] = plate1;
  129.                     savesolution.result[l] = plate[l - 1][0];
  130.                     calculate(l - 1);
  131.  
  132.                     r = plate2%plate1;
  133.                     if (r == 0)
  134.                     {
  135.                         plate[l - 1][0] = plate2 / plate1;
  136.                         savesolution.operation[l] = '/';
  137.                         savesolution.result[l] = plate[l - 1][0];
  138.                         calculate(l - 1);
  139.                     }
  140.                 }
  141.             }
  142.             else if (plate1 >= plate2)
  143.             {
  144.                 plate[l - 1][0] = plate1 - plate2;
  145.                 if (plate[l - 1][0] != 0)
  146.                 {
  147.                     savesolution.operation[l] = '-';
  148.                     savesolution.result[l] = plate[l - 1][0];
  149.                     calculate(l - 1);
  150.                 }
  151.             }
  152.             else
  153.             {
  154.                 plate[l - 1][0] = plate2 - plate1;
  155.                 savesolution.value1[l] = plate2;
  156.                 savesolution.operation[l] = '-';
  157.                 savesolution.value2[l] = plate1;
  158.                 savesolution.result[l] = plate[l - 1][0];
  159.                 calculate(l - 1);
  160.             }
  161.         }
  162.     }
  163. }
  164.  
  165. int main()
  166. {
  167.     int i;
  168.  
  169.     for (i = 0; i<6; i++)
  170.     {
  171.         if (result == plateini[i])
  172.         {
  173.             cout << "Solution already in the 6 numbers:" << result << endl;
  174.             cout << "Press a key to finish \n";
  175.             getch();
  176.             return 0;
  177.         }
  178.     }
  179.     for (i = 0; i<6; i++)  // initialise plate[][]
  180.         plate[6][i] = plateini[i];
  181.     bestdistance = LONG_MAX; //distance maximal
  182.     bestlevel = INT_MAX;
  183.  
  184.     calculate(6);
  185.  
  186.     if (bestdistance>0)
  187.     {
  188.         cout << "nearest solution :\n";
  189.         affichesolution(bestlevel);
  190.     }
  191.  
  192.     cout << "Press a key to finish\n";
  193.     getch();
  194.  
  195.     return 0;
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement