pascal奇怪数列编程输入3个整数n,p,q,寻找一个由整数组成的数列(a1,a2,……,an),要求:其中任意连续p项之和为正数,任意连续q项之和为负数.0
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 23:47:51
![pascal奇怪数列编程输入3个整数n,p,q,寻找一个由整数组成的数列(a1,a2,……,an),要求:其中任意连续p项之和为正数,任意连续q项之和为负数.0](/uploads/image/z/3688511-23-1.jpg?t=pascal%E5%A5%87%E6%80%AA%E6%95%B0%E5%88%97%E7%BC%96%E7%A8%8B%E8%BE%93%E5%85%A53%E4%B8%AA%E6%95%B4%E6%95%B0n%2Cp%2Cq%2C%E5%AF%BB%E6%89%BE%E4%B8%80%E4%B8%AA%E7%94%B1%E6%95%B4%E6%95%B0%E7%BB%84%E6%88%90%E7%9A%84%E6%95%B0%E5%88%97%EF%BC%88a1%2Ca2%2C%E2%80%A6%E2%80%A6%2Can%EF%BC%89%2C%E8%A6%81%E6%B1%82%EF%BC%9A%E5%85%B6%E4%B8%AD%E4%BB%BB%E6%84%8F%E8%BF%9E%E7%BB%ADp%E9%A1%B9%E4%B9%8B%E5%92%8C%E4%B8%BA%E6%AD%A3%E6%95%B0%2C%E4%BB%BB%E6%84%8F%E8%BF%9E%E7%BB%ADq%E9%A1%B9%E4%B9%8B%E5%92%8C%E4%B8%BA%E8%B4%9F%E6%95%B0.0)
pascal奇怪数列编程输入3个整数n,p,q,寻找一个由整数组成的数列(a1,a2,……,an),要求:其中任意连续p项之和为正数,任意连续q项之和为负数.0
pascal奇怪数列
编程输入3个整数n,p,q,寻找一个由整数组成的数列(a1,a2,……,an),要求:其中任意连续p项之和为正数,任意连续q项之和为负数.0
pascal奇怪数列编程输入3个整数n,p,q,寻找一个由整数组成的数列(a1,a2,……,an),要求:其中任意连续p项之和为正数,任意连续q项之和为负数.0
设a[0](等于0)到a[i]的部分和为s[i],则只要求出s[0],s[1],…,s[n]之间的关系即可.而他们之间的关系可以用有向图表示,且在有向图中连成环的即为无解.对于a[i]至a[j]的和的表示方法,可以表示为s[j]-s[i-1].
求n=6,p=3,q=5时的数列.
设这六个数和a[0]为:
a[0] a[1] a[2] a[3] a[4] a[5] a[6]
部分和为:
s[0] s[1] s[2] s[3] s[4] s[5] s[6]
则可以得出:
s[3]-s[0]>0,s[4]-s[1]>0,s[5]-s[2]>0,s[6]-s[3]>0,s[5]-s[0]s[1],s[5]>s[2],s[6]>s[3],s[0]>s[5],s[1]>s[6]
由此可知,这个数列有解,且s数组的大小顺序为:
s[4]>s[1]>s[6]>s[3]>s[0]>s[5]>s[2]
又因为已知s[0]=0,所以将其余数依次加/减1,得:
s[4]=4,s[1]=3,s[6]=2,s[3]=1,s[0]=0,s[5]=-1,s[2]=-2
即s数组依次为:
0,3,-2,1,4,-1,2
由此可知a数组依次为:
3,-5,3,3,-5,3
我的代码太丑了,这个是sqybi在N年前写过的程序..
Program n_p_q;
Const
m = 10;
Var
s,n,p,q,i,k,L:Integer;
G:Array[0..m,0..m]Of 0..1;
t:Array[0..m]Of Record
i,o:Integer;
f:Boolean;
End;
a,r,rr,tt:Array[0..m]Of Integer;
Begin
WriteLn('请输入n,p,q的值:');
ReadLn(n,p,q);
FillChar(G,SizeOf(G),0);
For i:=0 To n Do t[i].f := True;
For i:=0 To n-p Do Begin
G[i+p,i] := 1;
Inc(t[i+p].o);
Inc(t[i].i);
End;
For i:=0 To n-q Do Begin
G[i,i+q] := 1;
Inc(t[i].o);
Inc(t[i+q].i);
End;
L := 1;
While L