В заданном интервале найти все числа, в записи которых отсутствуют хотя бы 2 одинаковые цифры - Free Pascal
Формулировка задачи:
На заданном числовом промежутке требуется найти все числа, в десятичной записи которых отсутствуют хотя бы две одинаковые цифры.
Решение задачи: «В заданном интервале найти все числа, в записи которых отсутствуют хотя бы 2 одинаковые цифры»
textual
Листинг программы
var
s:set of byte;
a,b,t:int64;
k:byte;
ok,ok1:boolean;
begin
repeat
write('введите границы числового промежутка:');
readln(a,b);
until a<b;
ok1:=false;
repeat
t:=abs(a);
ok:=true;s:=[];
while t>0 do begin
k:=t mod 10;
t:=t div 10;
if k in s then begin
ok:=false;
break;
end else include(s,k);
end;
if ok then begin
writeln(a);
ok1:=true;
end;
a:=a+1;
until a>b;
if not ok1 then writeln('Нет чисел удовлетворяющих условию');
readln;
end.
Объяснение кода листинга программы
- Переменная
sинициализируется как пустое множество (set of byte). - Пользователю предлагается ввести границы числового промежутка (переменные
aиb). - Пока
aменьшеb, выполняется следующий блок кода. - Переменная
tинициализируется как абсолютное значениеa. - Переменная
okинициализируется как true, а переменнаяsкак пустое множество. - Пока
tбольше 0, выполняется следующий блок кода. - Переменная
kинициализируется как остаток от деленияtна 10. tделится на 10 и уменьшается на 10.- Если
kуже присутствует в множествеs, то значение переменнойokменяется на false, и цикл прерывается. - Если
kне присутствует в множествеs, то оно добавляется в множествоs. - После цикла, если значение переменной
okравно true, то числоaвыводится на экран, и переменнаяok1инициализируется как true. aувеличивается на 1, и цикл повторяется до тех пор, покаaменьшеb.- Если после выполнения всего цикла значение переменной
ok1остается равным false, то выводится сообщениеНет чисел, удовлетворяющих условию.