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/07/14 20:08:43
![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](/uploads/image/z/5168875-67-5.jpg?t=free+pascal+%E6%95%B0%E5%88%97%EF%BC%88series%EF%BC%89+%E6%9C%89%E4%B8%80%E4%B8%AA%E6%95%B0%E5%88%97A1%2CA2%2C%E2%80%A6%2CAn%281%E2%89%A4n%E2%89%A430%29%2C%E5%85%B6%E4%B8%ADA1%3D0%2C%E6%B0%B8%E8%BF%9C%E4%B8%8D%E5%8F%98%2C%E4%BB%8E%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%95%B0A2%E5%BC%80%E5%A7%8B%2C%E5%AE%83%E5%8F%AF%E4%BB%A5%E6%98%AF%E5%89%8D%E9%9D%A2%E7%9A%84%E6%95%B0%E5%8A%A01%2C%E4%B9%9F%E5%8F%AF%E4%BB%A5%E6%98%AF%E5%89%8D%E9%9D%A2%E7%9A%84%E6%95%B0%E5%87%8F1.%E4%BE%8B%E5%A6%82n%3D4%2C%E5%8F%AF%E8%83%BD%E7%9A%84%E6%95%B0%E5%88%97%E6%9C%89%EF%BC%9A0+1+2+3+S%3D6%EF%BC%88%E5%8D%B34%E4%B8%AA%E6%95%B0%E7%9A%84%E5%92%8C%EF%BC%890+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.