Pavle_nis

C# Application1

Dec 9th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.79 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ConsoleApp11
  8. {
  9.     class Solution
  10.     {
  11.         long[] value1 = new long[16];
  12.         char[] operation = new char[16];
  13.         long[] value2 = new long[16];
  14.         long[] result = new long[16];
  15.         public Solution()
  16.         {
  17.  
  18.         }
  19.  
  20.         public long[] Value1
  21.         {
  22.             get { return value1; }
  23.             set { value1 = value; }
  24.         }
  25.         public long[] Value2
  26.         {
  27.             get { return value2; }
  28.             set { value2 = value; }
  29.         }
  30.         public char[] Operation
  31.         {
  32.             get { return operation; }
  33.             set { operation = value; }
  34.         }
  35.         public long[] Result
  36.         {
  37.             get { return result; }
  38.             set { result = value; }
  39.         }
  40.     }
  41.     class Program
  42.     {
  43.         long[] plateini = new long[6] { 1, 3, 3, 7, 10, 5};
  44.         long result = 999;
  45.  
  46.         long bestdistance;
  47.         int bestlevel;
  48.  
  49.         long[,] plate = new long[16, 16]; // 16*16 pour optimiser un peu
  50.  
  51.         Solution savesolution = new Solution();
  52.         Solution bestsolution = new Solution();
  53.         List<Solution> savesolution1 = new List<Solution>();
  54.        
  55.         void showSolution(int l)
  56.         {
  57.             int i;
  58.  
  59.             Console.WriteLine("******************\n");
  60.             for (i = 6; i > l; i--)
  61.                 Console.WriteLine("{0} {1} {2} = {3}\n", savesolution1[i].Value1[i], savesolution1[i].Operation[i], savesolution1[i].Value2[i], savesolution1[i].Result[i]);
  62.                 //Console.WriteLine("{0} {1} {2} = {3}\n", bestsolution.Value1[i], bestsolution.Operation[i], bestsolution.Value2[i], bestsolution.Result[i]);
  63.             Console.WriteLine("******************\n");
  64.             Console.ReadKey();
  65.         }
  66.  
  67.         void calculate(int l)
  68.         {
  69.             int i, j, k, n;
  70.             long plate1, plate2;
  71.             long distance;
  72.             long r;
  73.  
  74.             distance = result - plate[l, 0];
  75.             if (distance < 0)
  76.                 distance = -distance;
  77.             if (distance <= bestdistance)
  78.             {
  79.                 if (distance < bestdistance)
  80.                 {
  81.                     bestdistance = distance;
  82.                     bestsolution = savesolution;
  83.                     savesolution1.Add(savesolution);
  84.                     bestlevel = l;
  85.                     if (distance == 0)
  86.                     {
  87.                         showSolution(l);
  88.                     }
  89.                 }
  90.                 else  // (distance==bestdistance)
  91.                 {
  92.                     if (l > bestlevel)
  93.                     {
  94.                         bestsolution = savesolution;
  95.                         savesolution1.Add(savesolution);
  96.                         bestlevel = l;
  97.                         if (distance == 0)
  98.                             showSolution(l);
  99.                     }
  100.                 }
  101.             }
  102.  
  103.             if (l == 1)
  104.                 return;
  105.  
  106.             for (i = 0; i < l - 1; i++)
  107.             {
  108.                 for (j = i + 1; j < l; j++)
  109.                 {
  110.                     plate1 = plate[l, i];     // prend 2 plates
  111.                     plate2 = plate[l, j];     // parmi les C(l,2)=(l*l-1)/2 possibles
  112.  
  113.  
  114.                     n = 1;
  115.                     for (k = 0; k < l; k++)
  116.                     {
  117.                         if (k != i && k != j)
  118.                         {
  119.                             plate[l - 1, n] = plate[l, k];
  120.                             n++;
  121.                         }
  122.                     }
  123.  
  124.                     // attention si vous mettez l--; ici pour simplifier les "l-1" qui suivent, il faut mettre l++; apres pour retablir l pour la prochaine boucle
  125.  
  126.  
  127.                     plate[l - 1, 0] = plate1 + plate2;
  128.                     savesolution.Value1[l] = plate1;
  129.                     savesolution.Operation[l] = '+';
  130.                     savesolution.Value2[l] = plate2;
  131.                     savesolution.Result[l] = plate[l - 1, 0];
  132.                     calculate(l - 1);
  133.                     if (plate1 != 1 && plate2 != 1)
  134.                     {
  135.                         plate[l - 1, 0] = plate1 * plate2;
  136.                         //      savesolution.Value1[l]=plate1; inutile car fait juste avant
  137.                         savesolution.Operation[l] = '*';
  138.                         //      savesolution.Value2[l]=plate2;  inutile car fait juste avant
  139.                         savesolution.Result[l] = plate[l - 1, 0];
  140.                         calculate(l - 1);
  141.  
  142.                         if (plate1 >= plate2)
  143.                         {
  144.                             plate[l - 1, 0] = plate1 - plate2;
  145.                             if (plate[l - 1, 0] != 0)
  146.                             {
  147.                                 //              savesolution.Value1[l]=plate1;
  148.                                 savesolution.Operation[l] = '-';
  149.                                 //            savesolution.Value2[l]=plate2;
  150.                                 savesolution.Result[l] = plate[l - 1, 0];
  151.                                 calculate(l - 1);
  152.                             }
  153.                             r = plate1 % plate2;
  154.                             if (r == 0)
  155.                             {
  156.                                 plate[l - 1, 0] = plate1 / plate2;
  157.                                 //            savesolution.Value1[l]=plate1;
  158.                                 savesolution.Operation[l] = '/';
  159.                                 //          savesolution.Value2[l]=plate2;
  160.                                 savesolution.Result[l] = plate[l - 1, 0];
  161.                                 calculate(l - 1);
  162.                             }
  163.                         }
  164.                         else
  165.                         {
  166.                             plate[l - 1, 0] = plate2 - plate1; // toujours superieur … 0
  167.                             savesolution.Value1[l] = plate2;
  168.                             savesolution.Operation[l] = '-';
  169.                             savesolution.Value2[l] = plate1;
  170.                             savesolution.Result[l] = plate[l - 1, 0];
  171.                             calculate(l - 1);
  172.  
  173.                             r = plate2 % plate1;
  174.                             if (r == 0)
  175.                             {
  176.                                 plate[l - 1, 0] = plate2 / plate1;
  177.                                 //          savesolution.Value1[l]=plate2;
  178.                                 savesolution.Operation[l] = '/';
  179.                                 //          savesolution.Value2[l]=plate1;
  180.                                 savesolution.Result[l] = plate[l - 1, 0];
  181.                                 calculate(l - 1);
  182.                             }
  183.                         }
  184.                     }
  185.                     else if (plate1 >= plate2)
  186.                     {
  187.                         plate[l - 1, 0] = plate1 - plate2;
  188.                         if (plate[l - 1, 0] != 0)
  189.                         {
  190.                             //        savesolution.Value1[l]=plate1;
  191.                             savesolution.Operation[l] = '-';
  192.                             //        savesolution.Value2[l]=plate2;
  193.                             savesolution.Result[l] = plate[l - 1, 0];
  194.                             calculate(l - 1);
  195.                         }
  196.                     }
  197.                     else
  198.                     {
  199.                         plate[l - 1, 0] = plate2 - plate1; // toujours superieur … 0
  200.                         savesolution.Value1[l] = plate2;
  201.                         savesolution.Operation[l] = '-';
  202.                         savesolution.Value2[l] = plate1;
  203.                         savesolution.Result[l] = plate[l - 1, 0];
  204.                         calculate(l - 1);
  205.                     }
  206.                 }
  207.             }
  208.         }
  209.  
  210.         static void Main(string[] args)
  211.         {
  212.             int i;
  213.             Program prog = new Program();
  214.  
  215.             for (i = 0; i < 6; i++)   // v‚rifie que le Result n'est pas d‚j… dans les 6 nombres
  216.             {
  217.                 if (prog.result == prog.plateini[i])
  218.                 {
  219.                     Console.WriteLine("Solution already in the 6 numbers : %u\n", prog.result);
  220.                     Console.WriteLine("Press a key to finish\n");
  221.                 }
  222.             }
  223.             for (i = 0; i < 6; i++)  // initialise plate[,]
  224.                 prog.plate[6, i] = prog.plateini[i];
  225.             prog.bestdistance = Int32.MaxValue; //distance maximal
  226.             prog.bestlevel = Int32.MaxValue;
  227.  
  228.             prog.calculate(6);
  229.  
  230.             if (prog.bestdistance > 0)
  231.             {
  232.                 Console.WriteLine("nearest solution :\n");
  233.                 prog.showSolution(prog.bestlevel);
  234.             }
  235.         }
  236.     }
  237. }
Add Comment
Please, Sign In to add comment