Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <conio.h>
- using namespace std;
- class Solution {
- public:
- long value1[16];
- char operation[16];
- long value2[16];
- long result[16];
- };
- long plateini[16] = { 1,3,3,7,10,5 };
- long result = 999;
- long bestdistance;
- int bestlevel;
- long plate[16][16];
- Solution savesolution;
- Solution bestsolution;
- void affichesolution(int l)
- {
- int i;
- cout << "******************\n";
- for (i = 6; i>l; i--)
- cout << bestsolution.value1[i] << bestsolution.operation[i] << bestsolution.value2[i] << "=" << bestsolution.result[i] << endl;
- cout << "******************\n";
- }
- void calculate(int l)
- {
- int i, j, k, n;
- long plate1, plate2;
- long distance;
- long r;
- distance = result - plate[l][0];
- if (distance<0)
- distance = -distance;
- if (distance <= bestdistance)
- {
- if (distance<bestdistance)
- {
- bestdistance = distance;
- bestsolution = savesolution;
- bestlevel = l;
- if (distance == 0)
- {
- affichesolution(l);
- }
- }
- else // (distance==bestdistance)
- {
- if (l>bestlevel)
- {
- bestsolution = savesolution;
- bestlevel = l;
- if (distance == 0)
- affichesolution(l);
- }
- }
- }
- if (l == 1)
- return;
- for (i = 0; i<l - 1; i++)
- {
- for (j = i + 1; j<l; j++)
- {
- plate1 = plate[l][i];
- plate2 = plate[l][j];
- n = 1;
- for (k = 0; k<l; k++)
- {
- if (k != i && k != j)
- {
- plate[l - 1][n] = plate[l][k];
- n++;
- }
- }
- plate[l - 1][0] = plate1 + plate2;
- savesolution.value1[l] = plate1;
- savesolution.operation[l] = '+';
- savesolution.value2[l] = plate2;
- savesolution.result[l] = plate[l - 1][0];
- calculate(l - 1);
- if (plate1 != 1 && plate2 != 1)
- {
- plate[l - 1][0] = plate1*plate2;
- savesolution.operation[l] = '*';
- savesolution.result[l] = plate[l - 1][0];
- calculate(l - 1);
- if (plate1 >= plate2)
- {
- plate[l - 1][0] = plate1 - plate2;
- if (plate[l - 1][0] != 0)
- {
- savesolution.operation[l] = '-';
- savesolution.result[l] = plate[l - 1][0];
- calculate(l - 1);
- }
- r = plate1%plate2;
- if (r == 0)
- {
- plate[l - 1][0] = plate1 / plate2;
- savesolution.operation[l] = '/';
- savesolution.result[l] = plate[l - 1][0];
- calculate(l - 1);
- }
- }
- else
- {
- plate[l - 1][0] = plate2 - plate1;
- savesolution.value1[l] = plate2;
- savesolution.operation[l] = '-';
- savesolution.value2[l] = plate1;
- savesolution.result[l] = plate[l - 1][0];
- calculate(l - 1);
- r = plate2%plate1;
- if (r == 0)
- {
- plate[l - 1][0] = plate2 / plate1;
- savesolution.operation[l] = '/';
- savesolution.result[l] = plate[l - 1][0];
- calculate(l - 1);
- }
- }
- }
- else if (plate1 >= plate2)
- {
- plate[l - 1][0] = plate1 - plate2;
- if (plate[l - 1][0] != 0)
- {
- savesolution.operation[l] = '-';
- savesolution.result[l] = plate[l - 1][0];
- calculate(l - 1);
- }
- }
- else
- {
- plate[l - 1][0] = plate2 - plate1;
- savesolution.value1[l] = plate2;
- savesolution.operation[l] = '-';
- savesolution.value2[l] = plate1;
- savesolution.result[l] = plate[l - 1][0];
- calculate(l - 1);
- }
- }
- }
- }
- int main()
- {
- int i;
- for (i = 0; i<6; i++)
- {
- if (result == plateini[i])
- {
- cout << "Solution already in the 6 numbers:" << result << endl;
- cout << "Press a key to finish \n";
- getch();
- return 0;
- }
- }
- for (i = 0; i<6; i++) // initialise plate[][]
- plate[6][i] = plateini[i];
- bestdistance = LONG_MAX; //distance maximal
- bestlevel = INT_MAX;
- calculate(6);
- if (bestdistance>0)
- {
- cout << "nearest solution :\n";
- affichesolution(bestlevel);
- }
- cout << "Press a key to finish\n";
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement