Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/75: Рейтинг темы: голосов - 75, средняя оценка - 4.80
8 / 8 / 0
Регистрация: 15.02.2020
Сообщений: 195

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

29.06.2020, 02:33. Показов 15960. Ответов 18
Метки нет (Все метки)

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

Входные данные
В первой строке находятся числа N и S. В следующей строке - N чисел через пробел. 2 <= N <= 24, 0 <= Xi <= 50 000 000, -1 000 000 000 <= S <= 1 000 000 000.

Выходные данные
Если получить требуемый результат невозможно, вывести "No solution", если можно, то вывести равенство. Если решение не единственное, вывести любое.

Вот в общем и целом .

примеры:
входные данные
3 13
7 3 9
выходные данные
7-3+9=13
входные данные
3 1
7 3 9
выходные данные
7+3-9=1
входные данные
3 3
7 10 0
выходные данные
No solution

если кто-то может решить данную задачу, то можнете, пожалуйста, объяснить тоже, спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.06.2020, 02:33
Ответы с готовыми решениями:

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

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

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

18
8 / 8 / 0
Регистрация: 15.02.2020
Сообщений: 195
29.06.2020, 16:04  [ТС]
кто-то может ето решить??
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
29.06.2020, 18:52
Infeeqs, да какие тут отмазки, 9 строк занимает у меня наколеночное решение без ввода данных. Подсказка -используй библиотеку itertools
0
8 / 8 / 0
Регистрация: 15.02.2020
Сообщений: 195
29.06.2020, 19:09  [ТС]
Welemir1, использую её а что дальше? я же не такой гений как вы
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
29.06.2020, 19:16
Infeeqs, ну ты хоть зайди в доку и прочти что она умеет, вдруг какая мысль посетит? например составить все комбинации знаков + и - и в цикле подставлять их между числами. Затем сравниваем с искомым значением, если совпало -пишем выражение, если не одно не совпало пишем -нет решений. Не благодари!
0
8 / 8 / 0
Регистрация: 15.02.2020
Сообщений: 195
29.06.2020, 19:39  [ТС]
Welemir1, не получается у меня((
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
29.06.2020, 19:47
Infeeqs, это прискорбно( неужели слабо документацию почитать? я в тебе засомневался
0
8 / 8 / 0
Регистрация: 15.02.2020
Сообщений: 195
29.06.2020, 19:56  [ТС]
Welemir1, я прочитал!! я не понимаю где комбинации мне они выводят? да нигде их нет, вот это комбинация разве <itertools.combinations object at 0x02D4B7D0>?
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
29.06.2020, 20:00
Цитата Сообщение от Infeeqs Посмотреть сообщение
я прочитал!!

Цитата Сообщение от Infeeqs Посмотреть сообщение
я не понимаю где комбинации мне они выводят? да нигде их нет, вот это комбинация разве <itertools.combinations object at 0x02D4B7D0>?


Добавлено через 1 минуту
Цитата Сообщение от Infeeqs Посмотреть сообщение
combinations
Подсказочка - тебе нужны не combinations а product
0
8 / 8 / 0
Регистрация: 15.02.2020
Сообщений: 195
29.06.2020, 20:09  [ТС]
zhurban, мне не правильно подсказал Welemir1, потому что комбинации нужны в разном порядке а там они будут в одном порядке, я просто хочу решение и я его разберу и пойму

Добавлено через 1 минуту
просто все решают задачи на c++ а я единственный на python а на python Гораздо сложнее
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
29.06.2020, 20:13
Цитата Сообщение от Infeeqs Посмотреть сообщение
мне не правильно подсказал Welemir1
Уважаемый Welemir1 все верно тебе подсказал
Цитата Сообщение от Welemir1 Посмотреть сообщение
все комбинации знаков + и -
А все комбинации нужной длины как раз таки можно получить с помощью функции product
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
29.06.2020, 20:22
Цитата Сообщение от Infeeqs Посмотреть сообщение
вот это комбинация разве <itertools.combinations object at 0x02D4B7D0>
1) как выше и заметили -тебе нужен продакт а не комбинейшенс
2) да, это именно комбнация, что и с итераторами не знаком?
3) не надо решать 100 задач, раз ты не понимаешь ничего, нужно честно признаться себе, родителям, преподавателю, что это не твое. ИЛИ решить что твое схватить книгу в руки и плотно поработать!
2
29.06.2020, 21:53
 Комментарий модератора 
Ладно, товарищи, порезвились и хватит.
Давайте больше не будем оффтопить.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
30.06.2020, 01:06
Полный перебор при N = 24, наверно, долго будет работать. Мне трудно оценить. Если кто-то писал, поделитесь результатами.
Метод границ и ветвей. При неотрицательных слагаемых вполне сгодится.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def down(idx, N, S, sum, X, Sum, Z):
    if idx == N - 1:
        if sum == S:
            return False
        else:
            return True
    if sum + X[idx+1] - Sum[idx + 2] <= S:
        Z[idx] = '+'
        sum += X[idx+1]
        r = down(idx+1, N, S, sum, X, Sum, Z)
        sum -= X[idx+1]
        if not r:
            return False;
    if sum - X[idx+1] + Sum[idx + 2] >= S:
        Z[idx]= '-'
        sum -= X[idx+1]
        r = down(idx+1, N, S, sum, X, Sum, Z);
        sum += X[idx+1]
        if not r:
            return False;
    return True;
 
N, S = map(int, input().split());
X = list(map(int, input().split()));
Sum = X[:]
Sum.append(0)
for i in range(N - 1, -1, -1):
    Sum[i] += Sum[i+1]
Z = [0] * N
sum = X[0]
r = down(0, N, S, sum, X, Sum, Z)
if r == 0:
    print(r)
    print(X[0], end = '')
    for i in range(0, N - 1):
        print(Z[i], X[i+1], sep = '', end = '')
    print('=', S, sep = '')
else:
    print("No solution")
2
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
30.06.2020, 01:21
palva, ну можно ещё вот так...
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from itertools import product
 
n, s = map(int, input().split())
nums = input().split()
for product in product('+-', repeat=len(nums) - 1):
    evaluation = ''
    for i in range(len(product)):
        evaluation += nums[i] + product[i]
    evaluation += nums[len(nums) - 1]
    if eval(evaluation) == s:
        print(evaluation + '=' + str(s))
        exit(0)
print('No solution')
1
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
30.06.2020, 02:15
zhurban, я этим не очень владею. Но запустил для N = 3 Имя переменной цикла пришлось поправить, оно совпадало с импортированным именем. После ввода данных что-то случилось, я даже не понял что. Я запускаю из под Spyder

Добавлено через 9 минут
При обращении к eval консоль перезапускается.
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
30.06.2020, 02:18
Цитата Сообщение от palva Посмотреть сообщение
Имя переменной цикла пришлось поправить, оно совпадало с импортированным именем
Да, спасибо, вы правы. ПиЧарм не ругался, хотя это очень глупо было так называть
Цитата Сообщение от palva Посмотреть сообщение
я этим не очень владею.
Ну я сделал используя уже готовые решения. А вот вашому ответу я поражен , ведь все сделано "ручками и умом"
Цитата Сообщение от palva Посмотреть сообщение
Метод границ и ветвей.
Для меня, к сожалению, это ещё неизваданые знания
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
30.06.2020, 07:00
Цитата Сообщение от zhurban Посмотреть сообщение
exit(0)
это не хорошо, надо чтобы программа сама завершалась, ибо не осталось строк кода, например break.
Цитата Сообщение от zhurban Посмотреть сообщение
evaluation = ''
    for i in range(len(product)):
        evaluation += nums[i] + product[i]
    evaluation += nums[len(nums) - 1]
заменить на листкомпс + ф-строки, 21 век же =)

Добавлено через 1 минуту
Цитата Сообщение от palva Посмотреть сообщение
Метод границ и ветвей.
снимаю шляпу за сам подход, мне бы лень было все это писать, когда есть итертулз. Ну имена переменных конечно того...этого... это не путь питона
1
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
30.06.2020, 09:59
Цитата Сообщение от zhurban Посмотреть сообщение
ведь все сделано "ручками и умом"
Просто пару недель назад делал эту задачу при прохождение курса Спортивное программирование на Coursera. Тестовые данные там таковы, чтобы прямой перебор захлебывался:
Code
1
2
50 -3360
91 67 84 50 69 74 78 58 62 64 55 95 81 77 61 91 95 92 77 86 91 54 52 53 92 82 71 66 68 95 97 76 71 88 69 62 67 99 85 94 53 61 72 83 73 64 91 61 53 68
Сейчас же просто переписал код C++ на Python. Возможно, не лучшим образом, поскольку питон я только изучаю.
Кстати, ссылка на курс https://www.coursera.org/learn... me/welcome Бесплатно, но если не жалко денег, можно приобрести бумагу об успешном прохождении.

Добавлено через 4 минуты
Цитата Сообщение от palva Посмотреть сообщение
При обращении к eval консоль перезапускается.
Теперь понял, это из-за exit(). Ночью "в темноте" не разглядел этого оператора. Надо попробовать запустить перебор при N=24.

Добавлено через 17 минут
Попробовал. Запускаю из-под Spyder, да и железо не очень.
Данные
Code
1
2
24 -841
91 67 84 50 69 74 78 58 62 64 55 95 81 77 61 91 95 92 77 86 91 54 52 53
Две минуты до первой выдачи. Судя по-тому, на каком этапе в это время находился перебор, программа будет работать минут 30.

Добавлено через 13 минут
27 минут работало. Если бы данные были таковы, что No solution, то столько бы и работало. А сейчас вариантов было очень много, и первого пришлось ждать всего 2 мин.

Добавлено через 9 минут
Попробую еще все минусы, кроме предпоследнего (и первого, конечно). Первая строка данных 24 -1471 "Границ и ветвей" находит это решение за доли секунды. Не знаю, единственное ли. Надо запускать полный перебор, чтобы выяснить. Но не хочется опять ждать 27 минут.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.06.2020, 09:59
Помогаю со студенческими работами здесь

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

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

Динамическое программирование. Расставить перед числами знаки «+» и «-» так, чтобы значение было равно заданному целому
Задача 5: Плюс-Минус Даны N целых чисел X1, X2, …, XN. Требуется расставить перед ними знаки «+» и «-» так, чтобы значение получившегося...

Расстановка знаков "+" и "-" так, чтобы значение получившегося выражения было равно заданному целому S ( ошибка в коде )
Нужно расставить между ними знаки &quot;+&quot; и &quot;-&quot; так, чтобы значение получившегося выражения было равно заданному целому S. В файле expr.in.txt...

Вставить между некоторыми цифрами 123456789 записанными именно в таком порядке знаки + и - так, чтобы значение получившегося выражения было число m
Дано натуральное число m. Вставить между некоторыми цифрами 123456789 записанными именно в таком порядке знаки + и - так, чтобы значение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru