如題:
   A,B,C 三個已知大於0的整數,|A - B| > C,想實現 |A * X - B * Y| <= C,  
   X,Y 都必須是大於0的整數,求X,Y的最小值。

解决方案 »

  1.   

    求X,Y的最小值
    这是什么意思?x的最小值或y的最小值?还是x+y的最小值?
      

  2.   

    呵呵,不知道我理解的对不对!如果A,B,C都是已经的, 则 |A * X - B * Y| = C  吧绝对值去掉在xy轴表示是什么, 应该是一条确定角度的直线,
    然后你可以找到交点!之后的事情你用笔在白纸上画一画,就知道答案了吧!!!应不难解开吧,如果还不会建议你看看《数值计算》这本书!!!
      

  3.   

    比如:
       A = 7, B = 9  
       要實現 兩者的差的絕對值是 1 (即C =1)
         X = {4,  5.....}
         Y = {3,  4.....}
       而x = 4, y = 3 就是符合|A * X - B * Y| <= C 的最小值了.
      

  4.   

    問題已經解決,現在結貼,參與有分.
    順便把代碼貼出來,看看大家有沒有更好的辦法,或者是否還有可以簡化一下。
    procedure TForm1.Button3Click(Sender: TObject);
    var
      Max,Min: Double;
      A,B,C: Double;
      Proportion,i,j: Integer;
      IsFind: Boolean;
    begin
      IsFind := False;
      A := StrToFloat(EdA.Text);
      B := StrToFloat(EdB.Text);
      C := StrToFloat(EdC.Text);
      Max := A;
      Min := B;  if B > A then
        begin
          Max := B;
          Min := A;
        end;  if  Abs(Max - Min)> C then
        begin
          for i :=1 to Round(Min)  do
            begin
              Proportion := Round((Max * i + C )/ Min);
              for j := 1 to Proportion do
                begin
                  if Abs(Min * Proportion - Max * i) <= C then
                    begin
                      Memo1.Text := '';
                      Memo1.Lines.Add(IntToStr(j +i));
                      Memo1.Lines.Add(IntToStr(i));
                      IsFind := True;
                      Break;
                    end;
                end;
              if IsFind then
                Break;
            end;
        end;
    end;
      

  5.   

    令A>B:function GetResult(const A, B, C: Integer; var x, y: Integer): Integer;
    var
    z, t, iy : Integer;
    begin
    t := A - B;
    // z = y-x
    for z:=1 to A do
    begin
    y := Trunc((z*A-C)/t);
    for iy:=Max(y, z+1) to Trunc((z*A+C)/t) do
    begin
    x := iy - z;
    Result := A*x - B*iy;
    if((Result<=C)and(Result>=-C))then
    begin
    y := iy;
    Exit;
    end;
    end;
    end;
    Result := -1;
    end;
      

  6.   

    晕呀! 还聊呢!
    说的多明白了呀,不就是平行线段找焦点附件的(x,y)或者平行线到原点距离最近的(x,y)吗? 利用数值计算里的方法 很容易解决注重散列 问题的