python作业

1.某个人进入如下一个棋盘中,要求从左上角开始走,
    最后从右下角出来(要求只能前进,不能后退),
    问题:共有多少种走法?
    
    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

代码如下

def a(m, n):

    dp = [[0] * n for _ in range(m)]  # 创建一个m行n列的二维数组,并初始化为0

    for i in range(m):

        for j in range(n):

            if i == 0 or j == 0:

                dp[i][j] = 1  # 将第一行和第一列的值设为1,表示只有一种走法

            else:

                dp[i][j] = dp[i-1][j] + dp[i][j-1]  # 根据状态转移方程计算dp[i][j]的值

    return dp[m-1][n-1]

m = 5  # 棋盘的行数

n = 8  # 棋盘的列数

print(a(m, n))  # 输出结果a

2.

作业2:
    输入一行符号,以#结束,判断其中的对称符号是否匹配。对称符号包括:
    { } 、 [ ] 、 ( )、 < >

    如果对称符号能够实现中间对称,则输出yes
    否则输出no
 

代码如下

def zhan(symbols):

    stack = []  # 创建一个栈来存储左括号

    symbol_dict = {']': '[', '}': '{', ')': '(', '>': '<'}  # 符号映射关系

    for symbol in symbols:

        if symbol in {'{', '[', '(', '<'}:

            stack.append(symbol)  # 遇到左括号时将其压入栈中

        elif symbol in {'}', ']', ')', '>'}:

            if not stack or stack[-1] != symbol_dict[symbol]:

                return "no"  # 如果栈为空或栈顶括号与当前右括号不匹配,则返回"no"

            stack.pop()  # 栈顶括号与当前右括号匹配,将栈顶括号弹出

    if not stack:

        return "yes"  # 遍历结束后栈为空,表示所有的对称符号都匹配

    else:

        return "no"  # 栈不为空,表示有未匹配的对称符号

symbols = input("请输入一行符号:")

print(zhan(symbols))

3.给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),
    可知至少存在一个重复的整数,假设只有一个重复的整数,
    请找出这个重复的数

代码如下

def findDuplicate(nums):          #定义一个查找重复

    slow = fast = nums[0]

    while True:

        slow = nums[slow]  # 慢指针每次移动一步

        fast = nums[nums[fast]]  # 快指针每次移动两步

        if slow == fast:

            break

    fast = nums[0]  # 将快指针重新指向数组的第一个元素

    while fast != slow:

        fast = nums[fast]

        slow = nums[slow]

    return slow

nums = [1, 3, 4, 2, 2]  # 示例输入

print(findDuplicate(nums))  # 输出结果

你可能感兴趣的:(python,算法,开发语言)