pascal编程高手Match

来源:百度知道 编辑:UC知道 时间:2024/05/11 14:06:15
某次同学聚会,老同学见面个个喜气洋洋,互相握手问好。参加此次聚会者每人都与老同学握了一次手,共握903次,试求参加聚会的人数?

先用数学方法分析,解题会事半功倍。
program work;
var
i:integer;

begin
for i:=1 to 1000 do
if (i*(i-1))/2=903 then begin writeln(i);exit; end;
end.

设有n个人,每个人与别人握n-1次手,由于是相互握手,次数一共应为n(n-1)/2次。
program jlk;
var
i:integer;
begin
for i:=1 to 100 do
if i*(i-1)=903*2
then write(i);
end.
结果为43人。

要优化 否则超时
附程序:
var
i:longint;
begin
for i:=1 to 32766 do
if i*(i-1)=903*2
then begin write(i);halt;end;
end.

你的若是 free pascal就把‘longint’改成‘int64’;
再把‘32766’扩大些;
若还超时 就用 动归

1+2+3+4+...+N=903 枚举N