Вставить между цифрами 1, 2, 3, 4, 9 знак одной из операций +-*/, так, чтобы результат 8-операций равнялся 100 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вставить между цифрами 1,2,3,4...9 знак одной из операций +-*/, так, чтобы результат 8-опреаций равнялся 100. Имеется 8 решений. Распечатать их со знаками. 1*2+3*4*5-6+7+8-9=10

Решение задачи: «Вставить между цифрами 1, 2, 3, 4, 9 знак одной из операций +-*/, так, чтобы результат 8-операций равнялся 100»

textual
Листинг программы
#include<stdio.h>
 
char m[20];
const int N = 100;
double binop(char o, double a, double b) {
    return o == '+' ? a + b : o == '-' ? a - b : o == '*' ? a*b : b == 0 ? 0 : a / b;
}
 
void f(double a, char o, double b, char op, int n) {
    m[n - 1] = op;
    if (n > 9) {
        double r = o == ' ' ? a : binop(o, a, b), e = 0.000001;
        if (r > N - e && r < N + e && m[1] == '+') {
            printf("1");
            for (int i = 2; i <= 9; i++) printf("%c%d", m[i], i);
            printf("=%d\n", (int)r);
        }
    }
    else if (o == ' ') {
        f(a, '+', n, '+', n + 1);
        f(a, '-', n, '-', n + 1);
        f(a, '*', n, '*', n + 1);
        f(a, '/', n, '/', n + 1);
    }
    else {
        f(binop(o, a, b), '+', n, '+', n + 1);
        f(binop(o, a, b), '-', n, '-', n + 1);
        f(a, o, b*n, '*', n + 1);
        f(a, o, b / n, '/', n + 1);
    }
}
int main(void) { f(0, ' ', 0, ' ', 1); return 0; }

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы