Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2009, 12:37   #1
CrazyRabbit
Пользователь
 
Аватар для CrazyRabbit
 
Регистрация: 27.10.2008
Сообщений: 38
По умолчанию Количество чисел, делящихся на 11

Доброго времени суток!
Есть задача: Н-ти все числа, делящиеся на 11, на промежутке от a до b(1<=a<=b<=10^19), сумма цифр которых лежит на промежутке от p до q.
Подскажите, пжл, идею динамического решения.
Заранее спасибо)))

Последний раз редактировалось CrazyRabbit; 08.08.2009 в 13:23.
CrazyRabbit вне форума Ответить с цитированием
Старый 08.08.2009, 13:19   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

А при чем деление на 11 в заголовке?
puporev вне форума Ответить с цитированием
Старый 08.08.2009, 13:25   #3
CrazyRabbit
Пользователь
 
Аватар для CrazyRabbit
 
Регистрация: 27.10.2008
Сообщений: 38
По умолчанию

все, исправил.
CrazyRabbit вне форума Ответить с цитированием
Старый 08.08.2009, 13:30   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Признак делимости на 11.
Цитата:
Число делится на 11 тогда и только тогда, когда сумма цифр с чередующимися знаками равна 0 или делится на 11 (то есть 182 919 делится на 11, так как 1 — 8 + 2 — 9 + 1 — 9 = −22 делится на 11) — следствие факта, что все числа вида 10n при делении на 11 дают в остатке (-1)n.
Если Вы работаете в обычном Паскале, где не поддерживается тип Int64, то число нужно вводить строкой. Затем идти по строке и складывать или вычитать цифры(преобразовав их через val(s,t,c) или через ord(s)). Оформить это в виде функции логического типа. Затем в цикле считать все такие числа в заданном интервале, интервал тоже вводится строками.
puporev вне форума Ответить с цитированием
Старый 08.08.2009, 13:36   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот недавно разбирали похожую задачу, правда в Делфи, но суть таже.
http://programmersforum.ru/showpost....66&postcount=1
puporev вне форума Ответить с цитированием
Старый 08.08.2009, 14:09   #6
CrazyRabbit
Пользователь
 
Аватар для CrazyRabbit
 
Регистрация: 27.10.2008
Сообщений: 38
По умолчанию

это в принципе обычный перебор...и задача не пройдет по времени. надо какой-то другой способ!!!!
CrazyRabbit вне форума Ответить с цитированием
Старый 08.08.2009, 14:53   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
это в принципе обычный перебор
ага. надо брать все числа от a до b и "перебирать" - проверять подходит ли данное число. кстати, в проходе по разрядам числа сразу формировать две суммы: одну с чередующимся знаком (для проверки делимости на 11), вторую сумму обычную - для проверки попадания в диапазон сумм разрядов (p <= SumРазрядов <= q) (да, и если сумма оказывается больше q - можно цикл сразу прерывать - дальше уже суммировать разряды смысла нет!)

Цитата:
и задача не пройдет по времени.
1) Вы ничего не говорили про ограничение по времени.
2) не смешите мои тапочки... 19 цифр просуммировать это много займёт времени?!
Хотя, конечно, цикл по числа 1 до 10^19 - это весьма небыстро... Ну тогда можно после первого найденного подходящего числа увеличивать проверяемые числа с шагом 11... это должно дать 10кратное ускорение...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.08.2009, 19:12   #8
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

А какие значения могут принимать p и q ?
Gapro вне форума Ответить с цитированием
Старый 08.08.2009, 19:13   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ну видимо от 1 до 18*9
puporev вне форума Ответить с цитированием
Старый 09.08.2009, 01:56   #10
CrazyRabbit
Пользователь
 
Аватар для CrazyRabbit
 
Регистрация: 27.10.2008
Сообщений: 38
По умолчанию

на счет значений p и q puporev прав. На один тест отводится 2 сек, поэтому вышеизложенное решение не подойдет. Нужно как-то применить динамику.
CrazyRabbit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Количество чисел после точки infog Общие вопросы Delphi 9 31.05.2009 12:10
количество выпавших чисел street-walker Паскаль, Turbo Pascal, PascalABC.NET 2 19.05.2009 08:32
количество выпавших чисел street-walker Помощь студентам 1 18.05.2009 21:13
Составить программу, определяющую количество чисел, делящихся без остатка на три phoenixSV Паскаль, Turbo Pascal, PascalABC.NET 2 05.12.2008 15:05
Вывод чисел, делящихся на каждую из своих цифр. Паскаль ЯншинаВера Помощь студентам 3 08.04.2008 11:50