主题:救助QB问题,请高手伸手,谢谢
dxwrw
[专家分:0] 发布于 2006-09-26 16:41:00
从一楼到二楼共有20个台阶,每步只能跨一个或两个,那么这20个台阶一共有多少种走法?
先谢谢各位大侠了!
回复列表 (共8个回复)
沙发
maxumi [专家分:2200] 发布于 2006-09-26 17:26:00
dim s(20) as long
input n
s(1)=1
s(2)=2
if n<3 then
print s(n)
else
for i=3 to n
s(n)=s(n-1)+s(n-2)
next i
end if
print s(n)
以上
板凳
dxwrw [专家分:0] 发布于 2006-09-26 18:11:00
谢谢 maxumi
3 楼
moz [专家分:37620] 发布于 2006-09-27 08:23:00
有那么简单吗?
(持怀疑态度)
这是排列组合问题.
4 楼
moz [专家分:37620] 发布于 2006-09-27 08:24:00
循环的变量写错.
5 楼
maxumi [专家分:2200] 发布于 2006-09-27 08:43:00
不好意思, 确实写错了, 不是s(n)=s(n-1)+s(n-2), 是s(i)=s(i-1)+s(i-2).
这个问题确实是递推, 不要持怀疑态度.
i阶可以通过先走i-1阶, 再走1阶, 也可以通过先走i-2阶, 再走2阶, 所以s(i)=s(i-1)+s(i-2).
以上
6 楼
moz [专家分:37620] 发布于 2006-09-27 15:06:00
嗯,事实证明你是正确的.
DECLARE FUNCTION next$ (a$)
DEFLNG A-Z
n = 20
FOR i = 0 TO (n / 2)
s$ = STRING$(i, "2") + STRING$(n - i * 2, "1")
z$ = s$
DO
c = c + 1
PRINT z$
z$ = next$(z$)
LOOP UNTIL z$ = ""
NEXT
PRINT c
DEFSNG A-Z
FUNCTION next$ (a$)
l = LEN(a$)
FOR i = 1 TO l
b$ = MID$(a$, i, 1) + b$
NEXT
i = INSTR(b$, "12")
IF i > 0 THEN
MID$(a$, l - i, 2) = MID$(b$, i, 2)
IF i > 1 THEN MID$(a$, l - i + 2) = LEFT$(b$, i - 1)
next$ = a$
END IF
END FUNCTION
7 楼
dorremon1992 [专家分:870] 发布于 2006-10-02 19:12:00
用递归做嘛!还是用Pascal比较顺手一点!
Const Max=20;
Function Steps(Max,i:integer);
Var j:integer;
Begin
if Max<2 then i:=i+1
else for j:=1 to 2 do Step(Max-j,i);
End;
Var i:integer;
Begin
i:=0;
Step(Max,i);
writeln(i);
End.
8 楼
hs3180 [专家分:530] 发布于 2006-10-06 20:31:00
是个费波拉契数列,可以用费波拉契数列的同项公式求,
f(n)=(((1+sqrt(5))/2)^n-((1-sqrt(5))/2)^n)/sqrt(5)
sqrt是算术平方根
我来回复