Игра с калькулятором, + |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Игра с калькулятором, + |
Учинек |
Сообщение
#1
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: Илья Репутация: 0 |
В калькулятор вводится натурально число К и нажимается клавиша "+". Калькулятор все еще показывает К. Цель игры: получить на экране число, состоящее из одинаковых цифр. Для ее достижения можно производить только одно действие - нажимать на клавишу "=" (возможно, 0 раз). После первого нажатия получается результат К+К, после очередного нажатия результат увеличивается на К. Требуется определить, удастся ли достичь цели, а если удастся, то какое число, состоящее из одинаковых цифр, будет получено первым. Количество отображаемых калькулятором цифр считать неограниченным, время работы батареек - тоже.
Ограничения: 1<=K<=999, время 1с. Вводится одно число - К. Вывести если цели достичь невозможно "No", если возможно, вывести два числа через пробел: цифру, из которой состоит искомое число, и количество цифр в числе. Пример. ввод№1 37 вывод№1 1 3 ввод№2 25 вывод No Я даже не знаю, что делать. Тупой перебор не пойдет потому как числа могут быть очень большие....как мне кажется должна быть формула, но вот только какая.... И еще по-моему числа которые заканчиваются на 0 не будут образовывать число с одинаковыми цифрами, сколько их не складывай. Сообщение отредактировано: Учинек - |
maksimla |
Сообщение
#2
|
Знаток Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: 1 |
а я такой тупой что непонел примеров даже от куда взялись такие цифры можешь обеснить показать как цифры вычислялись
-------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
Учинек |
Сообщение
#3
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: Илья Репутация: 0 |
37+37+37=111.
Цифра 1 встретилась 3 раза. |
maksimla |
Сообщение
#4
|
Знаток Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: 1 |
а тебе что нужно чтобы цифра 1 встретилась пару раз или как непонел ?
то могу написать 25+25+25=75 Цифра 7 встретилась 1 раза. или 25+25+25+25= 100 Цифра 1 встретилась 1 раза. -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
Учинек |
Сообщение
#5
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: Илья Репутация: 0 |
...Цель игры: получить на экране число, состоящее из одинаковых цифр. .... Требуется определить, удастся ли достичь цели, а если удастся, то какое число, состоящее из одинаковых цифр, будет получено первым. ..... Это ответ на вопрос. Т.е. если будет число 44, то вывести надо: 4 2. А 25 сколько раз не складывай - не получиться число в котором будут все одинаковые цифры. |
Lapp |
Сообщение
#6
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
И еще по-моему числа которые заканчиваются на 0 не будут образовывать число с одинаковыми цифрами, сколько их не складывай. Хорошее соображение - числа, большие нуля (по условию), не могут состоять из одних нулей . Это я, кстати, использую ниже.Я даже не знаю, что делать. Тупой перебор не пойдет потому как числа могут быть очень большие....как мне кажется должна быть формула, но вот только какая.... Не думаю, чтоб была какая-то полезная формула на этот счет. Как грится, "трясти надо!" (с). Это тебе кажется, что числа будут очень большие: у страха глаза велики . Вот, смотри.Многократное сложение есть на самом деле умножение. Исходное число не больше тысячи. После умножения его на 1000 комбинации низших трех разрядов начнут повторяться: ... 123 * 1000 = 123000 123 * 1000 + 123 = 123123 ... Поэтому достаточно рассмотреть не более чем тысячекратное сложение. А это значит, что числа будут не больше 999999. Таким образом, работаем с типом LongInt и забываем о проблеме "больших чисел" . Подходов я вижу два: один прямой, другой "с заднего кирильца" (с). Первый - тупо в лоб складывать числа, как написано в условии, и проверять. Вот он: function Digit(n: LongInt; p: byte): byte; Выглядит громоздко даже с функцией.. А если не уложимся во время (хотя, 1 сек - не так и мало), то придется вставить вычисление цифры прямо в код. Второй метод основан на том, что чисел, состоящих из одинаковых цифр в диапазоне до миллиона не так уж и много (а точнее, 6*9=54). Перебираем их все и делим на данное число. Если остаток равен нулю - нам повезло . Этот способ гораздо изящнее и заведомо укладывается в сотые доли секунды, полагаю.. Вот он: var Вот и все. Как грится - хорошо , но мало.. Добавлено через 10 мин. Еще, вот это понравилось: В калькулятор вводится натурально число К ... Так и хочется добавить: "чисто конкретно" - и расставить пальцы.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Учинек |
Сообщение
#7
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: Илья Репутация: 0 |
да так было бы довольно просто, но достоверно известно, что для числа 997 ответ будет 1 166...
все-таки получается число с очень большими цифрами, даже если использовать инт64(можно использовать фри паскаль) то не войдет... именно поэтому мне, казалось, что должна быть какая-то формула. |
Lapp |
Сообщение
#8
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
достоверно известно, что для числа 997 ответ будет 1 166... Да??.. Хм.. надо подумать... Мое рассуждение про тысячу действительно не очень строгое... надо подумать! -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
Сообщение
#9
|
Гость |
Цитата именно поэтому мне, казалось, что должна быть какая-то формула. Посмотри здесь: Smallest multiple of n using a single digit with multiplicity, or 0 if no such number exists., там есть комментарии, которые могут оказаться полезными... |
Lapp |
Сообщение
#10
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Вот:
var Да, сглупил я, однако.. Но зато - оказалось, что не только хорошо, но и не очень мало! Вот контрольная выдача: Код Running "...uchinek-2.exe" 123 1 15 Running "...uchinek-2.exe" 37 1 3 Running "...uchinek-2.exe" 997 1 166 Running "...uchinek-2.exe" 25 No -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Учинек |
Сообщение
#11
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: Илья Репутация: 0 |
да задача хороша=)
только в вашей задаче на некоторые числа(это те которые я протестировал) к примеру: 1)99 1 18 2)77 1 6 3)33 1 6 3)333 1 9 4)999 1 27 может быть в начале поставить проверку на то если число уже с одинаковыми числами, то вывести его. |
Lapp |
Сообщение
#12
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
к примеру: Боюсь, это не решит проблему... 1)99 1 18 2)77 1 6 3)33 1 6 3)333 1 9 4)999 1 27 может быть в начале поставить проверку на то если число уже с одинаковыми числами, то вывести его. Дело в том, что сначала проверяются единицы (любое число единиц), потом двойки, и т.д. Поэтому число из единиц (если оно есть) находится раньше, чем из других цифр, даже если оно больше его. Надо подумать... Добавлено через 11 мин. Вот. Надеюсь, "это есть наш последний" (С) var Добавлено через 9 мин. да задача хороша=) Собственно, в ней ничего нет, кроме деления "уголком". Но простота тоже красива -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
klem4 |
Сообщение
#13
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Ухх, тысячу лет на Паскале не писал)))) Вот еще вариант:
function solve(const k: integer): longint; -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Текстовая версия | 11.01.2025 5:27 |