Паскаль. Основы программирования


Разные задачи


Пример 5. Напечатать все четырехзначные числа, в десятичной записи которых нет двух одинаковых цифр.

Сразу возникает мысль составить программу по следующей схеме:

организовать цикл

по числу тысяч, t от 1 до 9,

а затем внутренние циклы: по числу сотен, s от 0 до 9;

по числу десятков, d от 0 до 9;

по числу единиц, e от 0 до 9;

проверка условия:

если

цифры различны, тогда составленное из них четырехзначное число

 выдавать на экран.

Программа

 

Program Problem5; { 1 - й способ }

    uses WinCrt;

    var

       t, s, d, e : integer;

    begin

       writeln('Все четырехзначные числа из разных цифр');

       for t := 1 to 9 do

         for s := 0 to 9 do

           for d := 0 to 9 do

             for e := 0 to 9 do

                if (t <> s) and (t <> d) and

(t <> e) and (s <> d) and

                   (s <> e) and (d <> e)

                then write(t*1000 + s*100 + d*10 + e, ' ')

    end.

Понятно, что эта программа выполнена нерационально. В ней все циклы выполняются  полностью.

Программу можно усовершенствовать таким путем. Когда выполняется цикл сотен, тогда следующий цикл десятков надо начинать выполнять, если цифра сотен s не равна цифре тысяч t, в противном случае, иначе, цикл сотен надо продолжить, т. е. взять следующую цифру сотен.

Для цифры десятков, также установить условие, что следующий цикл единиц будет выполняться, если

цифра десятков d не равна цифре сотен и тысяч, в противном случае, иначе, надо переходить к следующей цифре десятков.

И тогда, "внутри" цикла единиц достаточно записать условие, если цифры единиц e

не равны цифре десятков d, сотен s и тысяч t, тогда четырехзначное число является искомым и оно выводится на экран.

Программа

 

Program Problem5a; { 2 - й способ }

    uses WinCrt;

    var

       t, s, d, e : integer;

    begin

       writeln('Все четырехзначные числа из разных цифр');

       for t := 1 to 9 do

         for s := 0 to 9 do if s <> t then

           for d := 0 to 9 do if (d <> s) and (d <> t) then

             for e := 0 to 9 do

               if (e <> d) and (e <> s) and

(e <> t)

                 then write((((t*10 + s)*10 + d)*10) + e, ' ')

    end.




Начало  Назад  Вперед



Книжный магазин