|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.11.2016, 20:40 | #1 |
Пользователь
Регистрация: 30.11.2016
Сообщений: 22
|
Задача на перебор Turbo Pascal
Доброго времени суток.
Столкнулся с проблемой в решении вот такой задачки: Из файла поступает целочисленная последовательность в которой первое число(n) - количество чисел в последовательности, а остальные - сама последовательность. Необходимо в выходной файл поместить число, которое будет содержать максимальный результат при вставке между числами последовательности 2 операций умножения и n-3 операций сложения. Суть проблемы: Пробовал реализовать сначала с обычным массивом - тупняк, не понимаю как после умножения склеить два индекса массива и потом сдвинуть все это на единичку влево. В голову пришла идея реализации с динамическим односвязным списком - опять тупняк. Синтаксис всей программы можете не описывать, помогите пожалуйста именно с этим моментом умножения. Заранее спасибо! |
30.11.2016, 21:01 | #2 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
2-а умножения - это последовательность поделена на три группы, скажем А, В, С. А+В+С = М - сумма всех элементов последовательности.
Произведение А*В*С ,будет максимальным, если эти суммы будут равны. Просматриваем последовательность с головы и хвоста и формируем три суммы - А, С и В=М-(А+С). Сумма каждой последовательности должна быть близкой к М/3 (не больше). Возможно, что потребуется уточняющая операция... Цитата:
Как-то так, ...
Как-то так, ...
|
|
30.11.2016, 21:09 | #3 |
Пользователь
Регистрация: 30.11.2016
Сообщений: 22
|
По моей изначальной задумке был счетчик умножений, и когда в результате перебора находилось два таких элемента массива с индексами i и i+1, что результат их умножения больше, чем этот счетчик - ему присваивалось значение i*i+1. Ну и я хотел 2 раза обойти цикл по такому алгоритму а потом просто в цикле for сложить все элементы массива. Но т.к в pascal нету динамических массивов - я встал в ступор.
К тому же сначала идут операции умножения, и только потом сложения. Поэтому вариант с разделением массива на 3 части не катит ((. Последний раз редактировалось nobody_nohead; 30.11.2016 в 21:12. |
30.11.2016, 21:36 | #4 | |||
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
Условие, выложенное вами:
Цитата:
Цитата:
Как-то так, ... PS: Цитата:
Как-то так, ...
Последний раз редактировалось ViktorR; 30.11.2016 в 21:40. |
|||
30.11.2016, 21:42 | #5 |
Пользователь
Регистрация: 30.11.2016
Сообщений: 22
|
Да, именно это я и имел ввиду. Просто ввиду моего варианта решения, сами элементы массива не изменяются, поэтому далее в цикле сложения будут участвовать начальные элементы, а не перемноженные между собой. В голову приходили варианты с созданием еще одного массива, и присваиванием ему уже измененных элементов, или же полное переприсваивание элементов исходного массива, но считаю эти решения нерациональными.
Последний раз редактировалось nobody_nohead; 30.11.2016 в 21:51. |
30.11.2016, 21:54 | #6 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
Ответьте на мой основной вопрос:
Ткните, на какой части задания основан ваш вывод? Цитата:
Как-то так, ...
Как-то так, ...
|
|
30.11.2016, 21:59 | #7 | |
Пользователь
Регистрация: 30.11.2016
Сообщений: 22
|
Цитата:
4 7 1 5 3 Программа должна найти решение с максимальном выводом, в данном случае это: 4*7+1+5*3, и вывести в файл output результат: 44 |
|
30.11.2016, 22:22 | #8 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
А вариант mas[i]*mas[i+1]*mas[i+2] возможен?
Если нет, то: Просматриваем массив и ищем произведения двух соседей на максимум. Первый шаг: инициируем переменную max1 := mas[1]*mas[2]; max1i := 1; инициируем переменную max2 := mas[3]*mas[4]; max2i := 3; Второй шаг: в цикле формируем max3 := mas[i]*mas[i+1]; max3i := i; Третий шаг: выполняем сортировку трех чисел - примеров на этом форуме полно. По завершении находим max1i и max2i. Далее формируем результат. PS: В свете примера перечитал условие. Вы правы, в условии нет речи о группировке. Как-то так, ..
Как-то так, ...
Последний раз редактировалось ViktorR; 30.11.2016 в 22:25. |
30.11.2016, 22:28 | #9 |
Пользователь
Регистрация: 30.11.2016
Сообщений: 22
|
Хорошо, попробую сделать по вашему способу. Во-всяком случае спасибо!
|
01.12.2016, 02:10 | #10 |
Забанен
Форумчанин Подтвердите свой е-майл
Регистрация: 01.11.2006
Сообщений: 420
|
Ограничения на входные данные какие?
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача turbo pascal на тему: файлы с произвольным доступом в Pascal | ExCiTeC | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 28.01.2013 20:36 |
Turbo Pascal задача | Инокентий09 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 02.06.2012 11:36 |
Задача в Turbo Pascal | Cooltik | Паскаль, Turbo Pascal, PascalABC.NET | 10 | 28.04.2012 19:24 |
Задача на Turbo Pascal | spezzA | Фриланс | 3 | 06.04.2011 23:13 |