小明和小新在做风筝(Kite),
小新未完成的Kite减去小明未完成的Kite
再乘以总未完成的Kite刚好等于Kite总数,
已知Kite总数为720,
那么你知道小明和小新各自完成了多少Kite?
以及各自未完成了多少Kite呢?小明xm/小新xx
小明完成xmDone/小新完成xxDone
小明未完成xmUndone/小新未完成xxUndone
总未完成cntUndone
风筝总数(总已完成+总未完成)sumsum=(xxUndone-xmUndone)*cntUndone
sum=720
xmDone/xxDone ??
xmUndone/xxUndone ??

解决方案 »

  1.   


    //我会用笨办法:循环
    procedure TForm1.Button1Click(Sender: TObject);
    var
      xm, xx, xmDone, xxDone, xmUnDone, xxUnDone : Integer;
    begin
      Memo1.Clear;  for xm := 0 to 720 do begin
        xx := 720-xm;
        for xmDone := 0 to xm do begin
          xmUnDone := xm-xmDone;
          for xxDone := 0 to xx do begin
            xxUnDone := xx-xxDone;
            if (xxUnDone-xmUnDone)*(xxUnDone+xmUnDone) = 720 then begin
              Memo1.Lines.Add(Format('总数720:小明任务%d,已完成%d、未完成%d;小新任务%d,已完成%d、未完成%d',[xmDone+xmUnDone, xmDone, xmUnDone, xxDone+xxUnDone, xxDone, xxUnDone]));
              Application.ProcessMessages;
            end;
          end;
        end;
      end;  Showmessage(Format('共有%d种可能',[Memo1.Lines.Count]));//共有5501种可能
    end;
      

  2.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      x,y,i,j:Integer;
      sum:Integer;
    begin
      for x:=0 to 720 do
      begin
        for y:=0 to 720 do
        begin
          if (x-y)*(x+y)=720 then
          begin
            for j:=0 to 720 do
            begin
              i:=720-j-x-y;
              if i>=0 then
              begin
                self.ListBox1.Items.Add('小新未完成:'+inttostr(x)+';小明未完成'+inttostr(y)+';小新已完成:'+inttostr(i)+';小明已完成:'+inttostr(j));
                self.ListBox1.Items.Add('小新未完成:'+inttostr(x)+';小明未完成'+inttostr(y)+';小新已完成:'+inttostr(j)+';小明已完成:'+inttostr(i));
              end;
            end;
          end;
        end;
      end;
      self.Label1.Caption:='共'+inttostr(self.ListBox1.Items.Count)+'种可能';//11002种结果
    end;
      

  3.   

    @ 楼上:你的结果“11002种可能”应该除以2,即5501种可能。验证方法:你可以把ListBox的内容导出为文本文件,然后查找任一行内容,都可以找到完全相同的另一行。
      

  4.   

    感觉是高数的问题啊。
    x为小明未完成
    y为小新未完成
    x2-y2=720
    x+y < 720能肯定得到x>=27 y >=3  y<360这样的话应该能缩小不少循环范围吧