Advertisement
dllbridge

Untitled

Sep 2nd, 2021
1,284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.57 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5. #include    <stdio.h>
  6.  
  7.  
  8.                                                  //  0 - отсутствие операции    
  9.                                                  //  1 = '+' Операция сложения
  10.                                                  //  2 = '-' Операция вычитания
  11. int           arr[8],                            // Содержит порядок операторов и пробелов
  12.               count,
  13.               test = 107;                        // Чему должен быть равен результат выражений.  
  14.  
  15.  
  16. int   foo(int *pAr, int g);
  17. int                  mon();
  18.  
  19.  
  20. ////////////////////////////////////////////////////
  21. int main()                                        //
  22. {
  23.  
  24.     foo(arr, 7);
  25. }
  26.  
  27.  
  28.  
  29.  
  30.  
  31. //  Перебор всех значений (3 в g+1 степени)
  32. ///////////////////////////////////////////////////
  33. int foo(int *pAr, int g)                         //
  34. {
  35.  
  36.     for(int i = 0; i < 3; i++)
  37.     {
  38.  
  39.        pAr[g] = i;
  40.        if( g) foo(arr, g - 1);
  41.        else   mon();
  42.     }
  43. }
  44.  
  45.  
  46.  
  47.  
  48. //  Преобразует из найденного набора (в arr[8]) строку...
  49. //  ...и печатает её. В виде арифметического выражения.
  50. ////////////////////////////////////////////////////               
  51. void show()                                        //
  52. {
  53.    
  54.      char sz[17] = "1";
  55.      
  56.      int       c =  1,
  57.                n =  1;
  58.            
  59.        
  60.      for(int i = 0; i < 8; i++)
  61.      {
  62.        
  63.          if(arr[i] == 0) { sz[c++] = 49 + n;     n++;   continue; }
  64.          if(arr[i] == 1)   sz[c++] = '+';
  65.          else              sz[c++] = '-';
  66.                  
  67.          sz[c++] = 49 + n; n++;  
  68.      }   sz[c  ] =  0;
  69.    
  70.      printf("%17s = %d\n", sz, test);          
  71. }
  72.  
  73.  
  74.  
  75.  
  76. ////////////////////////////////////////////////////  
  77. int mon()                                         //  
  78. {
  79.    
  80.     int summa = 0,
  81.         n     = 1,                                //  Номер цифры (от 1-го до 9)
  82.         arg   = 1,                                //  Первый аргумент всегда = 1  
  83.         op    = 1;                                //  Начальный знак операции 1 = '+'
  84.  
  85.  
  86.     for(int i=0; i < 8; i++)
  87.     {
  88.          
  89. n++;     if(arr[i])
  90.          {    
  91.                        
  92.             if(op == 1)  summa += arg;                 
  93.             else         summa -= arg;  
  94.              
  95.                   op  = arr[i];
  96.                   arg = n;  
  97.          } else { arg = arg *10 + n; }  
  98.     }
  99.    
  100.     if(op== 1) summa += arg;                               //  Операция с последним аргументом.
  101.     else       summa -= arg;       
  102.  
  103.     if(summa == test)  show();
  104. }
  105.  
  106.  
  107.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement