[题目分析]这是以读入数据的顺序为相反顺序进行累乘问题可将读入数据放入栈中到输入结束将栈中数据退出进行累乘累乘的初值为
PROC test;
CONST maxsize=;
VAR s:ARRAY[maxsize] OF integer topsuma:integer;
[top:=; sum:=;//
read(a);
WHILE a<> DO
[top:=top+; s[top]:=a; read(a); ]
write(sum:);
WHILE top> DO
[sum:=sum*s[top]; top:=top; write(sum:);]
ENDP;
[题目分析] 本题与第题基本相同不同之处就是求和另外用C描述
int test;
{int xsum=top=s[];
scanf(%d&x)
while (x<>)
{s[++top]:=a; scanf(%d&x); }
printf(sum:);
while (top)
{sum+=s[top]; printf(sum:); }
};
int Ack(int mn)
{if (m==) return(n+);
else if(m!=&&n==) return(Ack(m));
else return(Ack(mAck(mm));
}//算法结束
()Ack()的计算过程
Ack()=Ack(Ack()) //因m<>n<>而得
=Ack(Ack()) //因m<>n=而得
=Ack(Ack(Ack())) // 因m<>n<>而得
= Ack(Ack(Ack())) // 因m<>n=而得
=Ack(Ack()) // 因m=而得
=Ack() // 因m=而得
=Ack(Ack()) //因m<>n<>而得
= Ack(Ack(Ack())) //因m<>n<>而得
= Ack(Ack(Ack(Ack()))) //因m<>n<>而得
= Ack(Ack(Ack(Ack()))) //因m<>n=而得
= Ack(Ack(Ack())) //因m=而得
= Ack(Ack()) //因m=而得
= Ack() //因n=而得
= //因n=而得
()int Ackerman( int m int n)
{int akm[M][N];int ij;
for(j=;j<N;j++) akm[][j];=j+;
for(i=;i<m;i++)
{akm[i][]=akm[i][];
for(j=;j<N;j++)
akm[i][j]=akm[i][akm[i][j]];
}
return(akm[m][n]);
}//算法结束
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []