free pascal 数列(series) 有一个数列A1,A2,…,An(1≤n≤30),其中A1=0,永远不变,从第二个数A2开始,它可以是前面的数加1,也可以是前面的数减1.例如n=4,可能的数列有:0 1 2 3 S=6(即4个数的和)0 1 2 1 S

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/10 19:21:23
free pascal 数列(series) 有一个数列A1,A2,…,An(1≤n≤30),其中A1=0,永远不变,从第二个数A2开始,它可以是前面的数加1,也可以是前面的数减1.例如n=4,可能的数列有:0 1 2 3 S=6(即4个数的和)0 1 2 1 S

free pascal 数列(series) 有一个数列A1,A2,…,An(1≤n≤30),其中A1=0,永远不变,从第二个数A2开始,它可以是前面的数加1,也可以是前面的数减1.例如n=4,可能的数列有:0 1 2 3 S=6(即4个数的和)0 1 2 1 S
free pascal 数列(series)
有一个数列A1,A2,…,An(1≤n≤30),其中A1=0,永远不变,从第二个数A2开始,它可以是前面的数加1,也可以是前面的数减1.例如n=4,可能的数列有:
0 1 2 3 S=6(即4个数的和)
0 1 2 1 S=4
0 1 0 1 S=2
0 1 0 -1 S=0
0 -1 0 1 S=0
0 -1 0 -1 S=-2
0 -1 -2 -1 S=-4
0 -1 -2 -3 S=-6
给出n和S,问满足条件的数列有多少.
【输入描述】 2个整数
【输出描述】 一个整数(满足条件的数列的个数)
【输入样例】 4 0
【输出样例】 2

free pascal 数列(series) 有一个数列A1,A2,…,An(1≤n≤30),其中A1=0,永远不变,从第二个数A2开始,它可以是前面的数加1,也可以是前面的数减1.例如n=4,可能的数列有:0 1 2 3 S=6(即4个数的和)0 1 2 1 S
暴力的程序,优化的还没有想出来!

const max=30;

var n,s,sum:longint;
a:array[1..max] of longint;

procedure work(x:longint);
var i,t:longint;
begin
a[x]:=a[x-1]+1;
if xn then work(x+1)
else
begin
t:=0;
for i:=1 to n do t:=t+a[i];
if t=s then inc(sum);
end;
a[x]:=a[x-1]-1;
if xn then work(x+1)
else
begin
t:=0;
for i:=1 to n do t:=t+a[i];
if t=s then inc(sum);
end;
end;

begin
readln(n,s);
sum:=0;
a[1]:=0;
if n>=2 then work(2)
else if s=0 then inc(sum);
writeln(sum);
end.