Расставить арифметические знаки между элементами последовательности и вычислить выражение - C (СИ)

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

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

Добрый день,любимые-уважаемые! есть очень интересное задание,не знаю,встречался ли кто с таким. у нас есть 10 чисел в таком порядке:0 1 2 3 4 5 6 7 8 9.Между числами можно ПРОИЗВОЛЬНО вставлять знаки + или -,таким образом мы получим какое-то выражение с результатом.например: 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45 0 - 12 - 3 + 4 + 56789 = 56778 0 - 1 + 234 - 56 - 7 - 89 = 81 Задание:написать программу,которая на входе получит целое число и выпишет все существующие выражения,которые дают результатом это число.То есть,к примеру,если программа получит на входе 45,то как результат выпишет 0+ 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 и все остальные выражения,с помощью которых можно получить 45(естественно,выражения,сложенные из цифр 0 1 2 3 4 5 6 7 8 9,идущих по порядку.) Кто-нибудь о таком слышал? СРАЗУ ОГОВОРЮСЬ,НУЖНО ВЫПОЛНИТЬ В СИ,в этом заключается основная проблема.

Решение задачи: «Расставить арифметические знаки между элементами последовательности и вычислить выражение»

textual
Листинг программы
#include <stdio.h>
#define N 9
 
int increment(int *);
void print(int *);
 
int main(void)
{
    int state[N], i, sum, x;
    for (i=0; i < N; i++)
        state[i] = -1;
 
    printf("Enter x: ");
    scanf("%d", &x);
    while(increment(state))
    {
        sum = 0;
        for (i=0; i < N; i++)
            sum += (i+1) * state[i];
        if (sum == x)
            print(state);
    }
    return 0;
}
 
int increment(int *tick)
{
    int i;
    tick[N-1] += 2;
    for (i = N-1; i > 0; i--)
        if (tick[i] == 3)
        {
            tick[i-1] += 2;
            tick[i] = -1;
        }
    return tick[0] != 3;
}
 
void print(int *tick)
{
    int i;
    printf("0");
    for (i=0; i < N; i++)
        printf(" %c %d", (tick[i] > 0 ? '+' : '-'), i+1);
    printf("\n");
}

Объяснение кода листинга программы

В этом коде выполняется следующая последовательность действий:

  1. Ввод числа x и инициализация массива state. Сначала пользователю предлагается ввести число x. Затем, в цикле, все элементы массива state инициализируются значением -1.
  2. Цикл поиска решения. Цикл начинается с ввода числа x и продолжается до тех пор, пока значение x не будет найдено. В каждой итерации цикла выполняется следующее:
    • Вычисление суммы элементов массива state.
    • Проверка равенства суммы и числа x.
    • Если сумма равна x, то выполняется функция print, которая выводит решение на экран.
  3. Функция increment. Эта функция увеличивает значение каждого элемента массива на 2, начиная с последнего элемента. Если значение какого-либо элемента становится равным 3, то функция начинает проходить по всем элементам, начиная с предпоследнего, и увеличивать их значения на 2. При этом, если значение какого-либо элемента становится равным 3, то значение предыдущего элемента увеличивается на 2, а значение текущего элемента устанавливается равным -1. Функция возвращает значение tick[0], которое используется для определения, была ли найдена комбинация, удовлетворяющая условию.
  4. Функция print. Эта функция выводит решение на экран. Сначала выводится число 0, затем, в цикле, выводятся все элементы массива state. Если значение элемента больше 0, то перед ним выводится символ +, иначе -.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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