Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
Даны два четырёхзначных числа A и B. Выведите в порядке возрастания все четырёхзначные числа в интервале от A до B, запись которых содержит ровно три одинаковые цифры. Ввод Вывод 1900 1911 2100 1999 2000 2022 =Моё решение#include <iostream> using namespace std; int main() { long long a,b,i; cin>>a>>b; for(i=a;i<=b;i++) { if((i/1000==i%1000/100&&i%1000/100==i%100/10)||(i/1000==i%1000/100&&i%1000/100==i%10)||(i/1000==i%100/10&&i%100/10==i%10)||(i%10==i%1000/100&&i%1000/100==i%100/10)) { cout<<i<<" "; } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2013, 21:40 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
DimOnline, Моё решение очень плохое, занимает много памяти,очень не акуратное, и работает лишь при 6 проверках из 20. Хотелось бы узнать как такие задачи решать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2013, 21:41 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
DimOnlineDimOnline, Моё решение очень плохое, занимает много памяти,очень не акуратное, и работает лишь при 6 проверках из 20. Хотелось бы узнать как такие задачи решать. Шаг 1: Сначала решаешь эту задачу на бумажке. Потом решаешь ее на бумажке для другой пары исходных цифр. Потом для третей.... Шаг 2: Когда поймешь что именно ты делаешь при решении на бумажке - записываешь эту последовательность действий. На другую бумажку записываешь. Это черновик алгоритма. Шаг 3: Потом берешь все свои исходные пары цифр и повторяешь поиск решений подчиняясь черновику алгоритма. Шаг 4: Почти всегда результаты третьего шага не будут совпадать с результатами первого. Пытаешь понять почему произошло несовпадение. Либо ты ошибся на первом шаге, либо ошибка в алгоритме. Если ошибка в алгоритме исправляешь ее и повторяешь третий шаг. Шаг 5: Если уверен что алгоритм правильный - включаешь компьютер и записываешь алгоритм на нужном/любимом/каком-нибудь языке программирования. Шаг 6: Прогоняешь полученную программу по всем тем парам цифр которые ты использовал в первом и третьем шаге. Если есть разница в результатах - где-то ошибка. Либо в алгоритме и тогда ты выключаешь компьютер и прыгаешь на шаг 3. Либо в переводе алгоритма на ЯП - прыгаешь на шаг 5. Ни в коем случае не начинай процесс решения задач со включения компьютера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2013, 22:02 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
White OwlDimOnlineDimOnline, Моё решение очень плохое, занимает много памяти,очень не акуратное, и работает лишь при 6 проверках из 20. Хотелось бы узнать как такие задачи решать. Шаг 1: Сначала решаешь эту задачу на бумажке. Потом решаешь ее на бумажке для другой пары исходных цифр. Потом для третей.... Шаг 2: Когда поймешь что именно ты делаешь при решении на бумажке - записываешь эту последовательность действий. На другую бумажку записываешь. Это черновик алгоритма. Шаг 3: Потом берешь все свои исходные пары цифр и повторяешь поиск решений подчиняясь черновику алгоритма. Шаг 4: Почти всегда результаты третьего шага не будут совпадать с результатами первого. Пытаешь понять почему произошло несовпадение. Либо ты ошибся на первом шаге, либо ошибка в алгоритме. Если ошибка в алгоритме исправляешь ее и повторяешь третий шаг. Шаг 5: Если уверен что алгоритм правильный - включаешь компьютер и записываешь алгоритм на нужном/любимом/каком-нибудь языке программирования. Шаг 6: Прогоняешь полученную программу по всем тем парам цифр которые ты использовал в первом и третьем шаге. Если есть разница в результатах - где-то ошибка. Либо в алгоритме и тогда ты выключаешь компьютер и прыгаешь на шаг 3. Либо в переводе алгоритма на ЯП - прыгаешь на шаг 5. Ни в коем случае не начинай процесс решения задач со включения компьютера. Так я уже все перепроверил, с моей точки зрения решение правильное, но затратное, а говорят совсем наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2013, 22:04 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
DimOnline, Хохо... 6 из 20.. Это что, олимпиада какая? :) Итак, как всегда, решать в лоб - это не круто :) Потому и такие решения получаются не лучшим образом. А алгоритм такой. сначала уйдём от наших A и B и разберёмся как получить все числа удовлетворяющих условию, что в них 3 одинаковых цифры. то есть, если мы заменим одинаковые цифры на 1, а отличающуюся на 0, то получим, что такое число должно подходить под один из шаблонов: 1110 1101 1011 0111 таких чисел всего по 36 на каждую цифру, потому всего их 360. Как в правильном порядке их перебрать, идей пока нету... но, если мы запустим цикл от 0 до 9 (это для наших повторяющихся чисел), вложим в него ещё один от 0 до 9 (это для отличающийся цифры), а в него вложим цикл от 0 до 3 (а это наше расположение отличающийся цифры). В итоге мы сможем перебрать все варианты и выбрать те, которые нам подходят. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Всё, массив подходящих нам чисел готов... сортируем любым удобным способом по возрастанию и получаем готовый ответ. Над сортировкой посижу, подумаю... может что в голову придёт интересное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2013, 22:25 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
DimOnlineТак я уже все перепроверил, с моей точки зрения решение правильное, но затратное, а говорят совсем наоборот.Значит ты не сделал первые три шага. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2013, 22:35 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
ПрограмёрDimOnline, Хохо... 6 из 20.. Это что, олимпиада какая? :) Итак, как всегда, решать в лоб - это не круто :) Потому и такие решения получаются не лучшим образом. А алгоритм такой. сначала уйдём от наших A и B и разберёмся как получить все числа удовлетворяющих условию, что в них 3 одинаковых цифры. то есть, если мы заменим одинаковые цифры на 1, а отличающуюся на 0, то получим, что такое число должно подходить под один из шаблонов: 1110 1101 1011 0111 таких чисел всего по 36 на каждую цифру, потому всего их 360. Как в правильном порядке их перебрать, идей пока нету... но, если мы запустим цикл от 0 до 9 (это для наших повторяющихся чисел), вложим в него ещё один от 0 до 9 (это для отличающийся цифры), а в него вложим цикл от 0 до 3 (а это наше расположение отличающийся цифры). В итоге мы сможем перебрать все варианты и выбрать те, которые нам подходят. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Всё, массив подходящих нам чисел готов... сортируем любым удобным способом по возрастанию и получаем готовый ответ. Над сортировкой посижу, подумаю... может что в голову придёт интересное. Дело в том, что задача должна решаться только циклами for,while,until и условиями, массивами пользоваться нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 09:55 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
DimOnline, ну на мой взгляд чем писать зубодробительные if ы лучше уж перевести число в десятичный вид и в лоб поверить условия. но это непрогрессивный вариант решения. прогрессивный дал программёр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 10:08 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
DimOnline, Странное ограничение ). А в условии задачи оно есть? Ну там же должно быть тогда что-то типа "количество используемой памяти не должно превышать ..." Или там так и написано "не используя массивы"? Если да, значит какая-то неправильная у Вас олимпиада или что это такое (уж на скольких я побывал - ни разу такого не видел ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 12:54 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
Програмёр, Ну понимаешь, эта задача идет в 3-ем переоде в списке базового обучения (1-ый условие иф, 2-ой цикл while, 3-ий цикл for, и 4-ый уже массивы.) по идеи,мы их знать не должны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 19:49 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
DimOnlineПрограмёр, Ну понимаешь, эта задача идет в 3-ем переоде в списке базового обучения (1-ый условие иф, 2-ой цикл while, 3-ий цикл for, и 4-ый уже массивы.) по идеи,мы их знать не должны. но ведь ты их уже знаешь? )) так почему бы их не пользовать в программе и не написать приложение используя все требуемые возможности языка используя оптимальный алгоритм. Например, если числа будут не 4-значными, а 5-ти - тогда для прохода по всем числам потребуется 90000 итераций. А в моём случае всего 10*10*5=500... То есть каждая новая цифра прибавляет всего 100 итераций, а не увеличивает число проходов в 9 раз :) ну а сортировка... методом быстрой сортировки. Учитывая что массив почти полностью отсортирован изначально, количество итераций опять же будет приближённым к log(n)*n, где n - количество элементов. То есть при 500 (это если 5 цифр) это будет приблизительно 1000-1500 итераций. Ну считайте, общее преимущество моего алгоритма по времени около 4.5 раз... и с каждой цифрой возрастает в разы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 20:15 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
Давайте решим задачу в общем случае. Есть n-значные числа (диапазон). Вывести в порядке возрастания всё в интервале от A до B, запись которых содержит ровно m одинаковых цифр. Дополнительное ограничение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 20:23 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
mayton, Слишком просто :) Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:25 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, давай уберём ограничение в int. Наиболее пузатые косяки алгоритма вылезают внезапно на объёмах превышающих наши скромные ожидания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:29 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
mayton, Давайте. Ждем ваш вариант :) А мне лично лень и некогда думать над генерацией радужной таблицы для такой функции. Да и не факт, что генерация будет быстрее брутфорса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:41 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
В некотором более интересном варианте (когда числа выводить не нужно а нужно просто посчитать количество) мы могли бы учесть количество сочетаний. Или расширнив рассуждения о сочетаниях перейти к генератору без брутфорса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:45 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
maytonДавайте решим задачу в общем случае. Есть n-значные числа (диапазон). Вывести в порядке возрастания всё в интервале от A до B, запись которых содержит ровно m одинаковых цифр. Дополнительное ограничение. )) мой алгоритм в пролёте, так как тогда надо избавляться от массива, ведь увеличение m-n на единицу приводит к увеличению массива более чем в 10 раз... то есть при m=5 и n=2 он должен быть на 10*999*5!/2!=600*999= чуть меньше чем 600 000 элементов, при чём с повторениями (так как m-n>n), которые отсеять не так легко Так что... сижу, думаю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:47 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
mayton, Я могу и без расчета сочетаний сразу перейти к генерации. Но лень :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:47 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, я вас понимаю. Признаюсь что мне тоже лень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 21:49 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
maytonВ некотором более интересном варианте (когда числа выводить не нужно а нужно просто посчитать количество) мы могли бы учесть количество сочетаний. Или расширнив рассуждения о сочетаниях перейти к генератору без брутфорса. уже посчитал :) 10!/(10-m+n)*m!/n! (без учёта нижней и верхней границы) это я первым делом сделал, когда предложили более сложную задачу решить )) итак, если m=5, а n=2 мы получаем 43200 подходящих под описание чисел (если я не ошибся конечно). Вопрос в том, как их генерить в правильном порядке :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 22:03 |
|
||
|
Помогите решить задачу.
|
|||
|---|---|---|---|
|
#18+
DimOnlineDimOnline, Моё решение очень плохое, занимает много памяти,очень не акуратное, и работает лишь при 6 проверках из 20. Хотелось бы узнать как такие задачи решать.Протестировал 3 варианта сравнения. Код: plaintext 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. 1-й вариант самый медленный. 2-й самый быстрый. 3-й незначительно уступает 2-му (всего одно сравнение, но расчет достаточно ресурсоемкий) Но это будет сильно зависит от компилятора. ИМХО самый быстрый вариант с массивом заранее рассчитанных значений: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 06:55 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38504312&tid=2019783]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 322ms |
| total: | 566ms |

| 0 / 0 |
