考研5段
1、设输入元素为1,2,3,P,A,输入次序为123PA,元素经过一个栈后到达输出端,当所有元素均到达输出端后,有哪些序列可以作为高级语言的变量名?
我算的结果是:AP321,PA321,P3A21,P32A1,P321A,不知道对不对,用的方法就是出栈的规律,又觉得这题又不能这么简单,而且,我的列举的可能也不对,所以请教大家。
2、设A是含有N个分量的整数数组,写出求A中N个整数的平均值的递归定义。
我一时弄不清楚这个题的递归出口了,一看觉得好简单,可是却没有思路。
请各位不吝赐教!!
查看详细资料
TOP
考研3段
第一题对的
第二题出口就是(n==1),n是所求平均值中包含的变量个数。
十分感谢你!!!!
那第二题的算法应该是这样的吧:
Func average(VAR a:ARRAY [1..n] of integer):integer
VAR b:integer;
if n=1 then [b:=a[1];return b;]
else b:=average(a[n-1])
endf
如果正确,请告之,如果不对,请讲之,谢谢啦!!!
[此贴子已经被作者于2005-1-13 15:57:03编辑过]
(兄弟水平不咋样,不善于具体实现)
没用过pascal,语法不知道
我觉得return应该放到最后,在两个分支都要有返回。
begin
if n=1
then
b:=a[1];
else
b:=average(a[n-1]);
return b;
endp
对不起,我想我的算法根本不对。
[此贴子已经被作者于2005-1-13 16:12:43编辑过]
func average(a: ARRAY [1..n] OF integer):integer
if n=1 then return a[1]
else return ((a[n-1]+(n-1)*average(a[n-1]))/n)
不知道这样是否正确,请大家指点
我只是对a[2]至a[n]做和有点晕,不知道这个表达式如何表达,我知道这是这道题的关键
如果是用链表做,还可以用p^.next来表示下一个呢,可是用数组就不会了,唉,郁闷。
数组问题,用下标解决
大概应该是这样,如果不对,请大家多指教,为了大家看得清楚,我用类C写的。多谢你们的帮助啦
float average(n,j:integer,float a[])
{
float aver;
if(n==0) aver=a[0];
else aver=a[n]+average(n-1,j,a);
if(n==j) aver=aver/(j+1);
reuturn(aver);
}
JJ,上机试一下不就知道了,大不了搞几个断点或者监视变量。看着,不如运行。
if(n==j) aver=aver/(j+1);//这行可以不要,可以在上面一行用1/2取平均
[此贴子已经被作者于2005-1-15 12:57:10编辑过]