小明和小新在做风筝(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 ??
小新未完成的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 ??
//我会用笨办法:循环
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;
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;
x为小明未完成
y为小新未完成
x2-y2=720
x+y < 720能肯定得到x>=27 y >=3 y<360这样的话应该能缩小不少循环范围吧