Решение задачи Выражение с Меньшиков

Без пояснения   Просмотров: 4023


Даны N целых чисел X1, X2, ..., XN. Расставить между ними знаки "+" и "-" так, чтобы значение получившегося выражения было равно заданному целому S.


Код

#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int x[25];
char sign[25];
int sum,n;
void input()
{
    cin>>n>>sum;
    for (int i=0;i<n;i++)
        cin>>x[i];
}
void output()
{
    cout<<x[0];
    for (int i=1;i<n;i++)
        cout<<sign[i]<<x[i];
    cout<<"="<<sum;
 
    exit(0);
}
 
void rec(int curSum, int curIndex)
{
    if (curSum == sum) // ответ найден
        output();
    if (curIndex == n) // терминальное условие
        return;
 
    sign[curIndex] = '+';
    rec(curSum + x[curIndex], curIndex+1);
   
    sign[curIndex] = '-';
    rec(curSum - x[curIndex], curIndex+1);
}
void solve()
{
    rec(x[0],1);
    cout<<"No solution";
}
int main()
{
    input();
    solve();
    return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться

  1. Avatar
    Daria
    2023-09-24 15:06:51
    Данная программа работает некорректно. При выполнении условия в строке 29, функция возвращает сумму n-1 элементов, curIndex также становится равным n-1, что соответствует последнему элементу. Поэтому далее в 35 строчке верно заменится знак перед n-ным элементом на минус, но в 36 от суммы уже без последнего элемента снова будет вычитаться последний элемент. Пример: n=5, s=6, x{2,2,6,4,4}.
    Как решить это пока не сообразила :(


Заявка на расчет