首页 > 试题广场 >

大富翁游戏

[编程题]大富翁游戏
  • 热度指数:9432 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步。求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法。

输入描述:
输入包括一个整数n,(1 ≤ n ≤ 6)


输出描述:
输出一个整数,表示投骰子的方法
示例1

输入

6

输出

32
还是那个公式:f(n) = f(n-1) + f(n-2) + .... + f(1) + f(n-n).
这个f(n-n)是指:投的骰子数正好是n本身,那么f(0) = 1.
从公式上,我们能看出来,用递归做法比较简单.
在公式等号后的每一个函数,依然可以单独分解,例如 : f(n-1) = f(n-2) + ....+ f(1) + f(0),所以当n存在时,那么我们要分解n次(循环n次).
#!_*_coding:utf-8_*_
def numer(n):
    sum = 0 #用于记录每次分解得到的步数
    if n == 1 or n == 0:
        return 1
    else:
        for i in range(n):# 根据当前n的值,循环n次,将其分解为f(0) + f(1) + ... + f(n-1)
            sum += numer(i)
        return sum # 返回当前n进行的步数

编辑于 2018-04-19 10:42:01 回复(1)
###递归调用f(此次)=f(上次)*2,且每增加一步,方法是前一种状态的两倍。两倍怎么来的呢
###(3,2)两步走变为三步就是(3,2,1)和(1,3,2 ##############################
def f(nn):
    if nn == 1:
        return 1    
    else:
        m = f(nn-1)*2
        return m
n=input()
n=int(n)
print(f(n))
###32


编辑于 2018-04-08 22:52:32 回复(0)
N=input('')
N=int(N)
dp=[0]
for i in range(N):
    dp.append(sum(dp)+1)
print(max(dp))

发表于 2017-07-06 10:45:32 回复(0)