一、二分查找-【算法设计】
lst = [1, 2, 4, 6, 6, 8, 9, 12, 34, 56, 76, 99]
fir = 0
la = len(lst)-1 # 列表下标减一, 避免溢出
item = 56 # 存储一个要查找的值
find = False # 作用:标注,便于下面 代码的进行
while fir <= la and not find:
mid = (fir+la)//2 # 一定要用//, 不然会存在float
if lst[mid] == item: # 若中间那个数刚好是要查找的,直接输出
find = True
break
elif lst[mid] > item:
la = mid-1
else:
fir = mid+1
if find: # 符合我们要就查找的内容
print("找到数据项,在%d位置,要查找的数据是%d" % (mid, lst[mid]))
else:
print("要找的数据%d不在我们的列表中" % item)
二、约瑟夫问题
n = int(input()) # 输入总共的人数
m = int(input()) # 每隔多少人出局一个
people = [] # 存储空列表
for i in range(n): # 遍历多少人
people.append(True) # 全部人数均标注为True
# print(people) # 验证已有的人数是否正确
res = [] # 出局的人编号存储列表
i = 1
while any(people): # 只要列表中的元素有一个为True,则为True
for x, y in enumerate(people): # enumerate(list) 下标:x 元素:y(value)
if y:
if i == m:
people[x] = False # 符合要求的人退出
res.append(x+1) # 下标加1
i = 1 # 退出一个
else:
i += 1 # 一个个退出
print(res)
print("出局顺序:", res[:-1]) # 切片,留下最后一人
print("活下来的人是", res[-1]) # 最后未出局的编号
也许我接触代码不是很早,但我会一直坚持,毕竟有时候坚持真的会有一个意想不到的结果,加油,你也可以的!
算法小抄-个人部分(知识点)总结:
1、 动态规划问题的一般形式就是求最值
求解动态规划的核心问题是穷举
动态规划三要素:1、重叠子问题;2最优子结构;3、状态转移方程
每日一言
成功并不是非得成名,它是一种结果,更是一个过程,一个不断挑战自我、战胜自我的过程。