智能体测开Day21

发布时间:2026/7/11 7:08:48
智能体测开Day21 枚举# 枚举 枚举法 穷举法 基本的算法设计从解决问题的所有可能出发将所有解决办法一一列举排除直到解决问题为止 水仙花数 三位数每位数上的立方和等于该数 367 3**36**37**3367 五角星数 五位数每位数上的无次方和等于该数 递归 函数的内部调用该函数本身自己调自己 递归类似于循环但是比循环功能更强大 所有的递归都有一个出口否则肯定回内存溢出造成系统崩溃 阶乘 5 5*4*3*2*1 定义一个函数jiecheng(n) n代表获取n的阶乘 jiecheng(5) 5*jiecheng(4) jiecheng(4) 4*jiecheng(3) jiecheng(3) 3*jiecheng(2) jiecheng(2) 2*jiecheng(1) jiecheng(1) 1 -------------------出口 回归 jiecheng(1) 1 jiecheng(2) 2*1 jiecheng(3) 3*2*1 jiecheng(4) 4*3*2*1 jiecheng(5) 5*4*3*2*1 for i in range(100,1000): a i//100 b i//10%10 c i%10 if a**3b**3c**3i: print(i) for i in range(10000,100000): m 0 i str(i) for j in range(0,5): n int(i[j]) m m n**5 if m int(i): print(i) def abc(): print(------------) abc() # 阶乘 5 5*4*3*2*1 def xunhuan(n): sum 1 for i in range(1,n1): sum *i return sum print(xunhuan(4)) # 递归 def jiecheng(n): if n1: return n * jiecheng(n-1) else: return 1 print(jiecheng(8))查找# 查找 顺序查找按照存储顺序逐个排查直到找到为止 优点对列表的元素没有要求 缺点查询效率慢逐个查找可能找不到 二分查找前提列表的元素是有顺序的 l1 [52,33,45,6,71,23,45,22] # 查找某个元素 def search(list1,key): for k in list1: # 如果k和key相同找到了 if k key: print(找到了) return print(找不到) search(l1,6) ls 2,5,7,9,11,13,15,17,23,45,68 key11 mid ls 2,5,7,9,11 key11 mid 711 ls 9,11 key11 mid 中间值和key相同---找到了 ls 2,5,7,9,11,13,15,17,23,45,68 key12 mid 1312 ls 2, 5,7, 9,11 mid 712 ls 9,11 mid 1112 ls [] 空列表 ---没找到 def binary_search(ls,key): # 定义中间下标 mid len(ls)//2 # 判断中间下标对应的元素和key if not ls: return 没找到 if ls[mid]key: # ls[mid] key 往前找 ls[0:mid:] return binary_search(ls[0:mid:],key) elif ls[mid]key: # ls[mid] key 往后找 ls[mid1::] return binary_search(ls[mid1::], key) else: # ls[mid] key 找到了 return 找到了 ls[2,5,7,9,11,13,15,17,23,45,68] print(binary_search(ls, 13))冒泡排序# 冒泡排序 常见的排序方式冒泡排序选择排序快速排序哈希值排序 a 9 b 8 a, b b, a print(a) print(b) ls [45, 123, 23, 4, 6, 8, 25, 75, 89, 18] for i in range(0, len(ls) - 1): for j in range(0, len(ls) - 1 - i): if ls[j] ls[j 1]: # 互换 ls[j], ls[j 1] ls[j 1], ls[j] print(ls) a [中国, 阿根廷, 澳大利亚, 阿尔及利亚, 哈萨克斯坦, 俄罗斯, 巴西, 美国, 加拿大, 印度] b [960, 278,769.2 ,238.1, 272.2, 1709.8, 851.4, 937,998.4, 298] 根据国土面积对国家进行排序 a [中国, 阿根廷, 澳大利亚, 阿尔及利亚, 哈萨克斯坦, 俄罗斯, 巴西, 美国, 加拿大, 印度] b [960, 278, 769.2, 238.1, 272.2, 1709.8, 851.4, 937, 998.4, 298] for i in range(0, len(b) - 1): for j in range(0, len(b) - 1 - i): if b[j] b[j 1]: b[j], b[j 1] b[j 1], b[j] # 互换a a[j], a[j 1] a[j 1], a[j] print(a) scores{tom:89,lily:97,lucy:45} 推导式# 推导式 1)推导式是一种简洁高效的语法结构能快速生成列表字典集合 2推导式分为列表推导式字典推导式 集合推导式 生成器 3没有元组推导式和字符串推导式因为他们不可变 # 1~10之间所有数字的平方放到一个列表中。 # 方式1 ls [] for i in range(1,11): ls.append(i**2) print(ls) # 方式2 ls1 list(map(lambda x:x**2,range(1,11))) print(ls1) # 方式3:列表推导式 [a**2 for a in range(1,11) ] ls2 [a**2 for a in range(1,11)] print(ls2) 列表推导式:[表达式 for 变量 in 序列集 if 条件] # 1-100以内的 3的倍数放在一个列表中 ls3 [x for x in range(1,101) if x%30] print(ls3) # 1-10的数如果是偶数存偶数如果碰到奇数存储False ls4[偶数 if i%20 else False for i in range(1,11)] print(ls4) # 笛卡尔集 a 121 b ^* c !# ls [] for aa in a: for bb in b: for cc in c: ls.append(aabbcc) print(ls) ls5 [ aabbcc for aa in a for bb in b for cc in c] print(ls5) 集合推导式{表达式 for 变量 in 序列集 if 条件} # 1-10的数如果是偶数存偶数如果碰到奇数存储False 存储到集合中 set1 {偶数 if i%20 else False for i in range(1,11)} print(set1) set2 {aabbcc for aa in a for bb in b for cc in c} print(set2)