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
这是一个八行五列的棋盘
a = 8
b = 5
def div(i , j):
if i == a - 1 and j == b - 1:
return 1
if i < 0 or j < 0 or i >= a or j >= b:
return 0
return div(i + 1, j) + div(i , j + 1)
print(div(0, 0))
这里使用到了函数的递归,我们先进行俩个判断,1.不是最后一个 2.判断有没有越界
他们是一个从列走,一个从行走,其累计的值就是总的
结果是330
2.输入一行符号,以#结束,判断其中的对称符号是否匹配。
对称符号包括:
{ } 、 [ ] 、 ( )、 < >
如果对称符号能够实现中间对称,则输出yes
否则输出no
def is_match(s):
stack = []#定义一个空栈
for c in s:#将输入的值一个一个拿出来
if c == '{' or c == '[' or c == '(' or c == '<':
stack.append(c)#插入到空栈里面
elif c == '}' or c == ']' or c == ')' or c == '>':
if len(stack) == 0:#判断插入的栈是不是空
return False
top = stack.pop()
if (c == '}' and top == '{') or (c == ']' and top == '[') or (c == ')' and top == '(') or (c == '>' and top == '<'):
continue
else:
return False
return len(stack) == 0
if __name__ == '__main__':
s = input()
if is_match(s):
print('yes')
else:
print('no')
这里我们运用到栈,先判断输入一个数量可以整除2的符号串,利用栈先进先出的规则和列表的字符串进行比较(弹栈的方法)
3.给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),
可知至少存在一个重复的整数,假设只有一个重复的整数。
请找出这个重复的数
def find_duplicate(nums):
n = len(nums)
hash_map = {}
for i in range(n):
if nums[i] in hash_map:
return nums[i]
else:
hash_map[nums[i]] = True
return -1
if __name__ == '__main__':
nums = [1,1, 2,2,2, 3, 4, 5, 5]
print(find_duplicate(nums))
这里我们用字典和return -1 来帮助我们求重复值,当某个值已经重复的时候就会return 出来,但是这里,问你用到的递归的方法,只有次数重复最长的数字会被反回,如果有相同重复次数的,则反回先重复的数字,return -1 表示有重复的值,注意字典是一个key和Value是一对值,
4.读入学生成绩,获取最高分best,然后根据下面的规则赋等级值:
(1)如果分数≥best-10,等级为A
(1)如果分数≥best-20,等级为B
(1)如果分数≥best-30,等级为C
(1)如果分数≥best-40,等级为D
(1)其他情况,等级为F
for i in range(n):
score = scores[i]
if score >= best - 10:
grade = 'A'
elif score >= best - 20:
grade = 'B'
elif score >= best - 30:
grade = 'C'
elif score >= best - 40:
grade = 'D'
else:
grade = 'F'
grades.append(grade)
return grades