Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal]Найти все положительные четырехзначные чис


Автор: 6apon 23.3.2010, 23:01
Помогите решить две задачки

Найти все положительные четырехзначные числа АВСВ, для которых выполняются следующие условия: 
АВ-СD=А+В+С+D (здесь АВ и СD - двухзначные числа). А, В, С, D -разные цифры;

Дан шкаф формы параллелепипеда, размером X x Y x Z . Можно ли внести его в дверь размером N x M ?


Заранее спасибо.

Автор: orthrus 24.3.2010, 09:48
вот первая задача:
Код

VAR i:integer;

function valid(numb:integer):boolean;
var
    tmp : byte;
    mn : set of byte;
begin
    mn := [];
    valid := true;
    repeat
        tmp := numb mod 10;
        numb := numb div 10;
        if (tmp in mn) then begin
                               valid := false;
                               break;
                           end
                      else mn := mn + [tmp];

    until (numb = 0);
end;

function ravenstvo(numb:integer):boolean;
var
    tmp, AB,CD: integer;
    A,B,C,D : byte;
begin
    tmp := numb;
    CD := tmp mod 100;
    tmp := tmp div 100;
    AB := tmp mod 100;
    tmp := numb;
    D := tmp mod 10;
    tmp := tmp div 10;
    C := tmp mod 10;
    tmp := tmp div 10;
    B := tmp mod 10;
    tmp := tmp div 10;
    A := tmp mod 10;
    if ((AB-CD) = (A+B+C+D)) then ravenstvo := true
                             else ravenstvo := false;
end;

BEGIN
    for i:=1000 to 9999 do
        if valid(i) then
            if ravenstvo(i) then writeln(i);
    readln;
END.


Автор: Sanaff 24.3.2010, 23:18
Для второй задачи учитывать возможность наклона шкафа? 

Автор: 6apon 25.3.2010, 18:12
Цитата(Sanaff @ 24.3.2010,  23:18)
Для второй задачи учитывать возможность наклона шкафа?

нет

Автор: ФедосеевПавел 25.3.2010, 20:47
Можно и я подкину свой вариант решения первой задачи?
Код

PROGRAM Pas_xxx;
VAR
  A, B, C, D : Integer; {цифры искомого числа}
  {переменные для ускорения вычислений}
  AB         : Integer; {число AB=A*10+B}
  AB_C0      : Integer; {число AB_C0=AB-C*10}
  PS         : Integer; {частичная сумма PS=A+B+C}
  Count      : Integer;
BEGIN
  Count:=0;
  for A:=1 to 9 do begin
    for B:=0 to 9 do begin
      AB:=A*10+B;
      for C:=0 to A do begin
        AB_C0:=AB-C*10;
        PS:=A+B+C;
        for D:=0 to 9 do begin
          if (AB_C0-D)=(PS+D)
          then begin
            Inc(Count);
            WriteLn(Count:3,'. ',A, B, C, D,'  ',A,B,'-',C,D,'=',AB_C0-D,' == ',PS+D);
          end;
        end;
      end;
    end;
  end;
END.

Автор: orthrus 26.3.2010, 05:41
ФедосеевПавел, условие:
Цитата(6apon @  23.3.2010,  23:01 Найти цитируемый пост)
А, В, С, D -разные цифры;

не выполняется

Автор: ФедосеевПавел 26.3.2010, 20:41
Sorry...
Тогда добавим три строки
Код
PROGRAM Pas_xxx;
VAR
  A, B, C, D : Integer; {цифры искомого числа}
  {переменные для ускорения вычислений}
  AB         : Integer; {число AB=A*10+B}
  AB_C0      : Integer; {число AB_C0=AB-C*10}
  PS         : Integer; {частичная сумма PS=A+B+C}
  Count      : Integer;
BEGIN
  Count:=0;
  for A:=1 to 9 do begin
    for B:=0 to 9 do begin
      if B=A then Continue;
      AB:=A*10+B;
      for C:=0 to A do begin
        if (C=B) OR (C=A) then Continue;
        AB_C0:=AB-C*10;
        PS:=A+B+C;
        for D:=0 to 9 do begin
          if (D=C) OR (D=B) OR (D=A) then Continue;
          if (AB_C0-D)=(PS+D)
          then begin
            Inc(Count);
            WriteLn(Count:3,'. ',A, B, C, D,'  ',A,B,'-',C,D,'=',AB_C0-D,' == ',PS+D);
          end;
        end;
      end;
    end;
  end;
END.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)