2017 美团编程题

[编程题] 大富翁游戏

大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步。求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法。 

输入描述:

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

输出描述:

输出一个整数,表示投骰子的方法

输入例子1:

6

输出例子1:

32

分析:

类似于变态青蛙跳台阶。设走到第n步,有f(n)种走法,可以拆分成:第一次走1步,走法为f(n-1);第1次走2步,等等。。。

所以,就有 f(n) = f(n-1) + f(n-2) + ...+ f(1) = f(n-1) *2 = f(2)*2*2 = f(1) * 2**(n-1)

易知 f(1) = 1

n = int(raw_input())
print 2**(n-1)

[编程题] 拼凑钱币

给你六种面额 1、5、10、20、50、100 元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数。 

输入描述:

输入包括一个整数n(1 ≤ n ≤ 10000)

输出描述:

输出一个整数,表示不同的组合方案数

输入例子1:

1

输出例子1:

1

分析:

问题是要求不同硬币的组合方案数。假设d[sum]表示金额sum的组合数,那么可以根据sum是否使用某种硬币coins[j],分解为

d[sum] = d[sum]+d[sum-coins[j]]

n = int(raw_input())
coins = [1, 5, 10, 20, 50, 100]
d = [0 for i in range(n+1)]
d[0] = 1
for i in range(n+1):
    for j in range(len(coins)):
        if i>=coins[j]:
            d[i] += d[i-coins[j]]
print d[n]

 [编程题] 最大矩形面积

时间限制:1秒

空间限制:32768K

给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。 入参h为一个整型数组,代表每个柱子的高度,返回面积的值。

输入描述:

输入包括两行,第一行包含一个整数n(1 ≤ n ≤ 10000)
第二行包括n个整数,表示h数组中的每个值,h_i(1 ≤ h_i ≤ 1,000,000)

输出描述:

输出一个整数,表示最大的矩阵面积。

输入例子1:

6

2 1 5 6 2 3

输出例子1:

10
n = int(raw_input())
arr = map(int, raw_input().split())
arr.append(0)
stack = [-1]
ans = 0
for i in range(n+1):
    while arr[i] < arr[stack[-1]]:
        h = arr[stack.pop()]
        w = i - stack[-1] -1
        ans = max(ans, h*w)
    stack.append(i)
arr.pop()
print ans 

[编程题] 最长公共连续子串

时间限制:1秒

空间限制:32768K

给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度。 

输入描述:

输入为两行字符串(可能包含空格),长度均小于等于50.

输出描述:

输出为一个整数,表示最长公共连续子串的长度。

输入例子1:

abcde
abgde

输出例子1:

2
 def find_lcsubstr(s1, s2): 
    m=[[0 for i in range(len(s2)+1)] for j in range(len(s1)+1)]
    mmax=0   
    p=0 
    for i in range(len(s1)):
        for j in range(len(s2)):
            if s1[i]==s2[j]:
                m[i+1][j+1]=m[i][j]+1
                if m[i+1][j+1]>mmax:
                    mmax=m[i+1][j+1]
                    p=i+1
    return mmax 
str1 = raw_input()
str2 = raw_input()
if __name__ == '__main__':
    print find_lcsubstr(str1, str2)

猜你喜欢

转载自blog.csdn.net/agaoq/article/details/82115320