Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- // 0 - отсутствие операции
- // 1 = '+' Операция сложения
- // 2 = '-' Операция вычитания
- int arr[8], // Содержит порядок операторов и пробелов
- count,
- test = 107; // Чему должен быть равен результат выражений.
- int foo(int *pAr, int g);
- int mon();
- ////////////////////////////////////////////////////
- int main() //
- {
- foo(arr, 7);
- }
- // Перебор всех значений (3 в g+1 степени)
- ///////////////////////////////////////////////////
- int foo(int *pAr, int g) //
- {
- for(int i = 0; i < 3; i++)
- {
- pAr[g] = i;
- if( g) foo(arr, g - 1);
- else mon();
- }
- }
- // Преобразует из найденного набора (в arr[8]) строку...
- // ...и печатает её. В виде арифметического выражения.
- ////////////////////////////////////////////////////
- void show() //
- {
- char sz[17] = "1";
- int c = 1,
- n = 1;
- for(int i = 0; i < 8; i++)
- {
- if(arr[i] == 0) { sz[c++] = 49 + n; n++; continue; }
- if(arr[i] == 1) sz[c++] = '+';
- else sz[c++] = '-';
- sz[c++] = 49 + n; n++;
- } sz[c ] = 0;
- printf("%17s = %d\n", sz, test);
- }
- ////////////////////////////////////////////////////
- int mon() //
- {
- int summa = 0,
- n = 1, // Номер цифры (от 1-го до 9)
- arg = 1, // Первый аргумент всегда = 1
- op = 1; // Начальный знак операции 1 = '+'
- for(int i=0; i < 8; i++)
- {
- n++; if(arr[i])
- {
- if(op == 1) summa += arg;
- else summa -= arg;
- op = arr[i];
- arg = n;
- } else { arg = arg *10 + n; }
- }
- if(op== 1) summa += arg; // Операция с последним аргументом.
- else summa -= arg;
- if(summa == test) show();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement