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