1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| ForesTop |
5.11.2010 12:10
Сообщение
#1
|
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: Влад Репутация: 0 |
Помогите решить задачу.
Задача Индикатор. Лимит времени 2000/4000/4000/4000 мс. Лимит памяти 65000/65000/65000/65000 Кб. Недавно Вася приобрёл калькулятор с жидкокристаллическим индикатором. Этот индикатор отображает N цифр с помощью N одинаковых элементов. Отметим, что каждый элемент содержит семь полосок, каждая из которых может быть либо белой, либо чёрной. В частности при отображении цифры "1" чёрными являются две полоски. Вася - очень любознательный мальчик, поэтому он хочет узнать, какое максимальное и минимальное N-значные числа могут быть отображены на индикаторе его нового калькулятора так, чтобы черными были ровно k полосок. Напишите программу, которая найдёт ответ на Васин вопрос. Учитывайте при этом, что числа не могут содержать ведущие нули. Входные данные: два целых числа: N и k (1<=N<=100, 1<=k<=700). Выходные данные: В первой строке - минимальное число, во второй строке - максимальное число. Если указанным образом не может быть представлено ни одно число, выходной файл должен содержать одну строку NO SOLUTION. Пример 1. на входе: 5 15 на выходе: 10117 97111 Пример 2. на входе: 10 1 на выходе: NO SOLUTION Мой вариант решения (не работает):
Моя программа очень долго выполняется и выдаёт ошибки. Помогите пожалуйста разобраться! Сообщение отредактировано: ForesTop - 5.11.2010 15:32 |
![]() ![]() |
| Archon |
5.11.2010 15:48
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
Ты предлагаешь нам увлекательную игру "попробуй угадай за что отвечают эти однобуквенные переменные"? Нет уж, спасибо.
Первым делом объясни на словах свой алгоритм решения. Возможно ошибки именно в нём. -------------------- Close the World...txeN eht nepO
|
| ForesTop |
5.11.2010 16:02
Сообщение
#3
|
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: Влад Репутация: 0 |
Сначала я забиваю в массив кол-во чёрных палок для каждого числа! - Это должно быть понятно.
Потом математическим путём получаю число состоящее из считанных кол-ва цифр, и заодно получаю конечное максимальное число с считанным кол-во цифр. В примере такие числа получаю - 10000 и 99999. Потом проверяю если кол-во палок меньше чем кол-во цифр, то есть если не получится числа, то вывожу надпись NO SOLUTION. Дальше перевожу начальное число в строку. И вхожу в цикл. Потом в цикле считываю каждую цифру строки, и складываю кол-во палок для этой цифры с другими. Тем самым получаю сумму палок числа. Сравниваю - равна ли эта сумма нужной, в примере 15, и если нет, то увеличиваю число на 1 и перевожу его опять в строку, а если да, то активирую специальную переменную l. Потом заново вхожу в цикл, но уже с успешной проверкой переменной l, и там её деактивирую и активирую переменную z, но вместо простого числа ставлю конечное - 99999 и уже в цикле буду его уменьшать, а не увеличивать. И если сумма палок каждой цифры полученного числа будет равна нужной, то сохраняю это число, и активирую последнюю переменную d. Заново вхожу в цикл, и там после успешной проверки переменной d увеличиваю длину строки на 1, тем самым завершаю цикл. И уже потом вывожу 2 числа - минимальное и максимальное число на дисплее калькулятора с считанным кол-вом чёрных палок, в примере - 15. Моя программа выдаёт верные результаты лишь в некоторых случаях, а в остальных работает либо долго, либо вместо нормального максимального числа выдаёт 999999, ну и так далее. |
ForesTop Помогите решить задачу. Индикатор 5.11.2010 12:10
TarasBer > Сначала я забиваю в массив кол-во чёрных пало... 5.11.2010 16:22
ForesTop А как тогда, если не перебором??? 5.11.2010 16:26
Archon Используй аналитический алгоритм. Подумай, как бы ... 5.11.2010 16:29
ForesTop
Используй аналитический алгоритм. Подумай, как бы... 5.11.2010 16:35
Archon Тогда приведу свой вариант нахождения минимального... 5.11.2010 17:28
ForesTop Вот попробовал написать для максимального числа, в... 5.11.2010 18:25
Archon Попробуй входные данные n = 5, k = 11. 5.11.2010 18:51
ForesTop А так???
var
n, k, i: Integer;
s: String; { Тек... 5.11.2010 18:57
Archon n = 5, k = 13 :) 5.11.2010 19:02
ForesTop Попробуй теперь, поправил в предыдущем коде, замен... 5.11.2010 19:08
Archon Все равно неправильно. Ответ для n = 5, k = 13 дол... 5.11.2010 19:28
ForesTop Тогда подскажите, где у меня ошибка? 5.11.2010 19:29
Archon Ошибка в том, что твой алгоритм дает неправильный ... 5.11.2010 19:42
ForesTop Согласен, но я не прошу показать мне Ваше решение,... 5.11.2010 19:45
Archon Я бы и рад так поступить, но не могу указать на не... 5.11.2010 19:56
ForesTop Соглашусь и с этим, это не только выглядит, но и с... 5.11.2010 20:09
Archon Я потому и просил спрашивать, если мой алгоритм не... 5.11.2010 20:18
ForesTop Вот попробовал написать, но чего - то не получаетс... 5.11.2010 20:39
Archon Ну снова, было бы неплохо пояснять, что именно ты ... 5.11.2010 21:06
ForesTop Попробовал получить максимальное число методом пер... 5.11.2010 21:20
ForesTop Всем спасибо, вот решение методом перебора цифр дл... 6.11.2010 0:58
Archon Хорошее решение. И главное, самостоятельное =) 6.11.2010 9:25![]() ![]() |
|
Текстовая версия | 9.12.2025 2:02 |