Число, состоящее из 7 и 0

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
student00
Сообщения: 3
Зарегистрирован: 15 дек 2010, 10:44

Добрый день. Пытаюсь решить такую задачу: найти число, состоящее только из цифр 0 и 7, которое делится на заданное число без остатка. Т.е. вводим 1, получаем 7; вводим 2 -> 70; 3 -> 777, и т.д.
Вроде всё понятно, но не знаю с какого конца к задачке подобраться( Вобщем нашёл в инете такое решение:

Код: Выделить всё

var a, c, n : integer; 
b : boolean; 
begin 

readln(n);
a:=6;
repeat
b:=true;
inc(a);
if a mod n=0 then begin {зачем тут проверять условие, если без него то же самое?}
c:=a;
repeat
if (c mod 10=7)or(c mod 10=0)then c:=c div 10
else begin b:=false; c:=0; end;
until c=0;
end;
until (a mod n =0)and b;
write(a);
readln;
end.
Код вроде рабочий, но если честно, ничего не понял (нет, что такое циклы и условия знаю конечно, неясен сам алгоритм.) Пожалуйста, объясните кто-нибудь, что тут да как, можно в виде комментов. Или кто может, предложите свой вариант (хотя бы алгоритма). Заранее спасибо огромное.
student00
Сообщения: 3
Зарегистрирован: 15 дек 2010, 10:44

Ну вот, уже сам со всем разобрался :) Только единственное, не понял, зачем нужно было условие (см. комментарий в коде). И почему при вводе 9 прога подвисает (догадка: возможно для 9 такого числа просто не существует?) Надеюсь, кто-нибудь подскажет, спасибо!
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Для 9 число существует, по аналогии с тройкой: 777777777
М/б, есть и меньше, но приведенное соответствует условию.

Зацикливание может произойти из-за нехватик разрядности. Проверяемое число - a- описано как integer. Если это запускается на Pascal-е, то там максимальное значение для integer (учитывая, что это еще и ЗНАКОВОЕ число) 32 тысяч (примерно). Если в этих пределах число не найдено, то при очередном операторе inc (a) происходит переполнение, значение a становится равным минус 32 тысячи (отрицательным). И в дальнейшем зацикливается, вновь и вновь пытаясь найти чсило, которого в данном диапазоне нет.

Если в Delphi, то там integer четырехбайтный, т.е. макс.значение 2 миллиарда.
student00
Сообщения: 3
Зарегистрирован: 15 дек 2010, 10:44

А вы оказались правы, просто я протупил немного. Просто это число ищется очень долго, около 20 сек) Алгоритм-то построен на простом переборе, может можно как-то лучше, но я даже представить не могу.
Ответить