Дано трехзначное число. Вывести на экран все трехзначные числа, которые можно получить из цифр данного числа.
Несмотря на кажущуюся простоту задачи, она не так проста. Если в числе есть одинаковые цифры или нули, то получается ограниченное число комбинаций.
Допустим, дано число abc, где a, b и c - цифры. Возможных вариантов, помимо abc, вроде бы будет 5: acb, bac, bca, cab, cba. Однако, если цифра a равна цифре b, то само число можно записать в виде aac, и тогда других вариантов будет всего два - это aca и caa. B таких нюансов в данной задаче много.
Предусмотреть все варианты в конструкции if-else непосильная задача. Ниже приводится лишь часть.
Есть вариант решения через массив. Записывать туда каждое очередное число, если оно больше 99 и меньше 1000 и если его еще нет в этом массиве. Но и тут возникают сложности, связанные с повторением кода.
var n: 100..999; a,b,c: byte; begin readln(n); a := n div 100; b := n div 10 mod 10; c := n mod 10; if (ab) and (ac) and (bc) and (a0) and (b0) and (c0) then begin n := a * 100 + c * 10 + b; writeln(n); n := b * 100 + a * 10 + c; writeln(n); n := b * 100 + c * 10 + a; writeln(n); n := c * 100 + a * 10 + b; writeln(n); n := c * 100 + b * 10 + a; writeln(n); end else if (a=b) and (ac) and (a0) and (b0) and (c0) then begin n := a * 100 + c * 10 + b; writeln(n); n := c * 100 + a * 10 + b; writeln(n); end; end.
Комментарии
var a:array[100..999] of
Мой вариант
комбинации трехзначного числа
Рабочая программа через if-ы
Почему бы не использовать if?
1)вы берете через числа, а не
1)вы берете через числа, а не пробовали брать через строку? Тогда необходимость в mod и div отпадает.
2)условие будет легче и проще если проверять не все три числа одновременно, а каждое поочередно через цикл.
Решение
Глупо, но работает
Profit!!!
Решение