Помощь - Поиск - Пользователи - Календарь
Полная версия: Блок-схема для счастливого номера
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Женя
Обычная прога: Получить все шестизначные счастливые номера. (Про целое число n, удовлетворяющее условию 0<=n<=999999, говорят, что оно представляет собой счастливый номер, если сумма трёх его первых цифр равна сумме трёх его последних цифр; если в числе меньше шести цифр, то недостающие начальные цифры, считаются нулями).

прога:

Код

program luckynumber;
uses crt;
var a,b,c,d,e,f:byte;
y:longint;
x1:integer;
luck:real;
key:char;
begin
clrscr;
for a:=0 to 9 do
for b:=0 to 9 do
 for c:=0 to 9 do
begin
x1:=a+b+c;
  for d:=0 to 9 do
   for e:=0 to 9 do
    for f:=0 to 9 do
     if (x1=d+e+f) then
      begin
       y:=y+1;
       writeln ('Счастливый номер: ',a,b,c,d,e,f);
       If (y mod 10)=0 then
        begin
        writeln('Press Any Key for continue or Esc for exit...');
        key:=readkey;
        if ord(key)=27 then exit;
       clrscr;
       end;
      end;
    end;
readln
end.


Я что-то застрял с циклами.. как бы их так организовать на блок-схемах, чтобы всё работало? Пожлауйста, помогите!

Заранее благодарен!
volvo
Женя
Цитата
Обычная прога: Получить все шестизначные счастливые номера.

Все так, но это программа делается по-другому: у твоего варианта перебор 1.000.000 значений, а можно сделать гораздо меньше...
mithquessir
volvo
Согласен.
imho так можно сократить перебор где-то в 10-15 раз. :yes:
Код

var
 a,b,c,d,e,x1,x2,x3:integer;
begin
 for a := 0 to 9 do
   for b := 0 to 9 do
     begin
       x1 := a + b;
       for c := 0 to 9 do
         begin
           x2 := x1 + c;
           for d := 0 to 9 do
             begin
               x3 := x2 - d;
               if x3 > 0 then
                 for e := 0 to 9 do
                   case x3 - e of
                     0..9:WriteLn(a,b,c,d,e,x3-e);
                   end;
             end;
         end;
     end;
end.
volvo
mithquessir
А вот так - до перебора "всего" порядка 27000 значений...
Код

const
 total = 999;
 count = 27;

var
 arrCount: array[0 .. count] of integer;
 numbers: array[0 .. count, 1 .. total + 1] of integer;
 i, j, k, T: integer;
 s, counter: longint;
 n1, n2: integer; a, b, c, d, e, f: integer;
begin
 counter := 0;
 for i := 0 to count do
   begin
     for j := 0 to total do
       begin
         T := j; s := 0;
         while T > 0 do
           begin
             s := s + T mod 10;
             T := t div 10
           end;
         if s = i then
           begin
             inc(arrCount[i]); numbers[i, arrCount[i]] := j
           end;
       end;

     for j := 1 to arrCount[i] do
       begin
         n1 := numbers[i, j];
         a := n1 div 100; b := (n1 - 100*a) div 10; c := n1 mod 10;
         for k := 1 to arrCount[i] do
           begin
             n2 := numbers[i, k];
             d := n2 div 100; e := (n2 - 100*d) div 10; c := n2 mod 10;

             writeln(a, b, c, ' ', d, e, f);
             inc(counter);
           end;
       end;
   end;

 writeln('total numbers: ', counter)
end.
Digitalator
Цитата
А вот так - до перебора "всего" порядка 27000 значений...

Хотя можно ввобще без перебора smile.gif
volvo
Digitalator
Без перебора напечатать счастливые номера - занятие не для слабонервных, и тем более не для начинающих ;)
Женя
Помогите сделать пожалуйста блок-схему алгоритма на моём примере решения программы.. smile.gif всё, что требуется.. Да, одно замечание - блок цикла использовать нельзя.

мне главное надо - как связать все циклы.. Помогите!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.