|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.10.2011, 20:56 | #1 |
In progress...
Форумчанин
Регистрация: 25.09.2011
Сообщений: 161
|
Алгоритм для строки или массива.
Задание:
Открыть файл, вынуть оттуда 2 цифры, присвоить переменной а первую цифру, переменной b вторую. // Это все понятно Суть задачи: А - количество машин советской модели, B - количество иномарок. Нужно расставить машины в рад, так чтобы радом с иномаркой была хотя бы одна советская машина и наоборот. Из этого я понял: Возможные комбинации: (С - советская машина, И - иномарка) Выставить по очереди (при условии что А=В) - С И С И С И С - подходит (самая легкая) С И С И С С И С И - Подходит, то есть в середине можно поставить две одинаковых машины. (Это при А= В+1) Если А=В+2 можно вот так И С И И С И С И И С И В общем нельзя две одинаковых в начале строки, и/или в конце, и три и больше подряд внутри строки. Какой будет примерный алгоритм, и как лучше работать: Как с масивом или как со строкой ? Pascal. P.S Прошу не опошлять, так получилось с сокращениями |
22.10.2011, 00:25 | #2 | |
Пользователь
Регистрация: 11.10.2011
Сообщений: 60
|
Цитата:
Но все же.. на вскидку: У тебя есть три случая 1. A=B 2. A>B 3. A<B В первом все понятно, думаю. Просто последовательно переставляешь С и И и получаешь СИСИСИСИ А для двух других случаев придумал кое-что. Не думаю, что это оптимально и быстро, но по идее должно работать) В общем.. Создаешь массив на A+B. Записываешь в начало и конец С в случае A>B. Как ни крути, рядом с ними должны быть И, т.к. массив не замкнут (СС на конце или начале не принимаются). Дальше рядом с И ставишь по С. Дальше рассматриваешь массив, который еще не заполнен. И делаешь тоже самое. Пихаешь С по краям, к ним И, к И прицепляешь С. Ну выглядит это приблизительно так A = 8, B = 4; 1. _ _ _ _ _ _ _ _ _ _ _ _ 2. С_ _ _ _ _ _ _ _ _ _С 3. СИ_ _ _ _ _ _ _ _ИС 4. СИС_ _ _ _ _ _СИС 5. Рассматриваем подмассив _ _ _ _ _ _ и возвращаемся к пунту 1. Невооруженным глазом несложно заметить рекурсию) В принципе, есть казусные ситуации. Например при А=5, Б=4. Но это вы уж сами рассмотрите, а то мне лень писать. И кстати, вначале нужно сделать проверку на осуществимость задачи. Тоесть, Если, например А больше чем 2*Б, то ничего неполучится) не силен в паскале. Но по идее, строка - это тот же массив. И я бы работал со строками, т.к. char меньше памяти занимает))) Последний раз редактировалось Stilet; 22.10.2011 в 20:51. |
|
22.10.2011, 10:41 | #3 |
In progress...
Форумчанин
Регистрация: 25.09.2011
Сообщений: 161
|
Память роли не играет, главное реализовать задуманное Ща буду пробовать, если у кого есть идеи более короткого алгоритма, буду рад.
Если A - B > 6 или B - A > 6 -> Error ! Думаю такая проверка подойдет. Есть прикрепленная тема, там все о массивах, вам туда. Последний раз редактировалось Stilet; 22.10.2011 в 21:17. |
22.10.2011, 12:57 | #4 |
Пользователь
Регистрация: 11.10.2011
Сообщений: 60
|
|
22.10.2011, 13:30 | #5 |
In progress...
Форумчанин
Регистрация: 25.09.2011
Сообщений: 161
|
При условии что нельзя в начале и конце ряда по 2 одинаковых авто, но можно между двумя ВВ разместить двк АА = ВААВ и так далее. Но если одних более чем шесть то уже не получается разместить таким способом.
|
22.10.2011, 14:06 | #6 | |
Пользователь
Регистрация: 11.10.2011
Сообщений: 60
|
Цитата:
Условие все же заключается в том, что большее кол-во машин не должно привышать вдвое кол-во машин, которых меньше. Примитивная комбинаторика) Каждая наименьшая машина дает два вокантных места на соседство. И, кстати, алгоритм по идее достаточно легок и быстр ( О(n), если не ошибаюсь) |
|
22.10.2011, 14:52 | #7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
и, кстати, наоборот. Если B> 2*A - тоже не получится расставить машины. а по поводу того, что брать - массив или строку - это уже сугубо личное дело. и массив можно сделать array[1..A+B] of byte или of char, и строка - по сути своей является массивом array[1..255] of char (правда, в случае строки ещё нулевой элемент задействован под длину строки).. Если речь идёт о обычном DOS Pascal (TurboPascal), то надо учитывать, что в строке не может быть более 255 элементов. Массив же ограничен только сегментом данных 64 кб. Вся сложность в этой задачке именно в алгоритме перебора расстановок. |
|
22.10.2011, 15:12 | #8 | |
Пользователь
Регистрация: 11.10.2011
Сообщений: 60
|
Цитата:
Ну а алгоритм-то я в общем-то написал) Вы сами попробуйте на бумаге. Все работает) |
|
22.10.2011, 17:37 | #9 | |
In progress...
Форумчанин
Регистрация: 25.09.2011
Сообщений: 161
|
Цитата:
Классно вам, написали уже ) Я 2й день голову ломаю. |
|
22.10.2011, 18:29 | #10 |
Пользователь
Регистрация: 11.10.2011
Сообщений: 60
|
я имею ввиду попробуйте реализовать последовательность этого алгоритмя на бумаге. Возьмите 7 и 4, к примеру, и попробуйте)
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ввести массив вещественных чисел NxM для заданной строки массива найти два самых больших числа (на C#) | владислав10 | Помощь студентам | 1 | 10.04.2011 14:10 |
Строки в delphi. Необходим алгоритм для задачи. | Destiny265 | Помощь студентам | 5 | 01.04.2011 15:59 |
Добавление строки или столбца в указанное место массива | revaldo666 | Общие вопросы C/C++ | 11 | 28.03.2011 16:47 |
Нужно найти ошибку или написать алгоритм по проще! (строки) | velamut | Помощь студентам | 3 | 18.06.2010 16:09 |
Ищем ген. Подрядчика по 1с или партнера Для участия в тендерах или для участия в коммерческих (конкурсных | it-up2000 | Фриланс | 2 | 24.05.2010 11:51 |