0

Delphi 7 で、1 から 8 までの範囲を使用して、3 つの整数 (繰り返されない) のすべての可能な組み合わせをリストする関数をコーディングする必要があります。例:

123 124 125 ... 412 413 415 ... 874 875 876

この関数は比較目的で使用されるため、できるだけ高速であるとよいでしょう。

誰かがアイデアを提供できますか (可能であれば、いくつかのコード例を添えて)。

ありがとうございました!


さて、これが私がこれまでに得たものです。誰かがそれを改善するためのヒント(パフォーマンスの向上、コードの削減など)を持っている場合は、助けてください。再度、感謝します!

Function IsNumOnSet(Max, Num: Integer): Boolean;
var
  X, Y, Z: Integer;
Begin
  Result := False;
  For X := 1 to Max Do
    For Y := 1 to Max Do
      For Z := 1 to Max Do
        If (X <> Y) and (X <> Z) and (Y <> Z) Then
          If (IntToStr(X) + IntToStr(Y) + IntToStr(Z) = IntToStr(Num)) Then
          Begin
            Result := True;
            Exit;
          end;
end;

これが、Ken の助けを借りて完成した新しい関数です。将来、他の誰かに役立つかもしれません。ありがとうございました!

Function IsNumOnSet(const Min, Max, Num: Integer): Boolean;
var
  X, Y, Z: Integer;
Begin
  Result := False;
  For X := Min to Max Do
    For Y := Min to Max Do
      For Z := Min to Max Do
        If (X <> Y) and (X <> Z) and (Y <> Z) Then
          If (X * 100 + Y * 10 + Z = Num) Then
          Begin
            Result := True;
            Exit;
          end;
end;

誰かがより良いアイデアを持っている場合は、お知らせください!

4

2 に答える 2

3

これはループなしで解決できます。

番号の 3 桁を抽出し、それらが異なることを確認し、最小、最大の範囲内にあるかどうかを確認します。

uses Math;

function IsNumOnSet(min,max,num : Integer) : Boolean;
var
  d0,d1,d2 : Integer;
begin
  d0 := num mod 100;
  d1 := (num div 10) mod 10;
  d2 := num div 100;
  Result :=
    (d0 <> d1) and (d0 <> d2) and (d1 <> d2) and
    InRange(d0,min,max) and
    InRange(d1,min,max) and
    InRange(d2,min,max);
end;
于 2013-04-07T07:17:44.303 に答える