请问下题是信息学奥赛初赛读程序给结果的题,请高手分步讲解一下,谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/07 22:19:56
program program2;
var
i, number, ndata, sum: integer;
data: array[1..100] of integer;
procedure solve(s, sign, n: integer);
var i: integer;
begin
for i := s to ndata do begin
inc(sum, sign * (number div (n * data[i])));
solve(i + 1, -sign, n * data[i]);
end;
end;
begin
read(number ,ndata);
sum := 0;
for i := 1 to ndata do read(data[i]);
solve(1, 1, 1);
writeln(sum);
end.
输入:1000 3 5 13 11
输出: 。

program program2;程序名
var
i, number, ndata, sum: integer;定义变量
data: array[1..100] of integer;定义数组
procedure solve(s, sign, n: integer);
var i: integer;
begin
for i := s to ndata do begin
inc(sum, sign * (number div (n * data[i])));
solve(i + 1, -sign, n * data[i]);
end;
end; 定义过程
begin
read(number ,ndata);
sum := 0;
for i := 1 to ndata do read(data[i]);
solve(1, 1, 1);
writeln(sum);
end. 程序主体

过程:是一个循环语句,当i取s到ndata之间的数时,求sum加上sign与number与数组data中第i个数和n积的商整数位的和,记为sum
这个sum再参与第2次循环。
(如:i:=100 data[100]:=20 sum:=10 sign:=40 number:=110 n:5
inc(sum, sign * (number div (n * data[i])))
结果:sum等于50)
solve(i + 1, -sign, n * data[i]);即对solve进行新的赋值,参与下一次的循环;
主体:先读入ndata和number,确定i的范围,定义sum的初始值为0,读入数组data中的第i项,然后运行过程solve(1,1,1)即规定
s:=1 sign:=1 n:=1.带入过程中运算,进入循环,当循环结束时,即当i=ndata时,程序停止,读出此时的sum的值。
结果616

楼上的简直在说废话
对P懂一点点的都知道你说的东西啊