目录
某个人进入如下一个棋盘中,要求从左上角开始走,最后从右下角出来(要求只能前进,不能后退),问题:共有多少种走法?
输入一行符号,以#结束,判断其中的对称符号是否匹配。对称符号包括:{ } 、 [ ] 、 ( )、 < >
给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数
Demo61 指定等级
#初始化数据
student_num = int(input("请输入人数:"))
grade = eval(input("请输入对应学生成绩:"))
#算出最大值
best = max(grade)
#分级
for i in range(student_num) :
if grade[i] >= best-10 :
print(f"学生{i}分数为{grade[i]}等级为A")
elif grade[i] >= best-20 :
print(f"学生{i}分数为{grade[i]}等级为B")
elif grade[i] >= best-30 :
print(f"学生{i}分数为{grade[i]}等级为C")
elif grade[i] >= best-40 :
print(f"学生{i}分数为{grade[i]}等级为D")
else :
print(f"学生{i}分数为{grade[i]}等级为E")
Demo62 计算数字的出现次数
#初始化数据
num = int(input("请输入数的个数:"))
array = list(eval(input("请输入数据:")))
#插入排序
def sort(array) :
for i in range(len(array) - 1) :
for j in range(len(array) - 1 , 0 , -1) :
if array[j] < array[j - 1] :
array[j] , array[j -1] = array[j - 1] , array[j]
return array
array = sort(array)
#函数计数
def search (num , array) :
#初始化容纳计数的数
temp = 0
#下标法表示数组中的数
for i in range(num) :
#如果前一个数和当前数相等,直接跳过该次循环
if array[i - 1] == array[i] :
continue
#如果不相同,则进行计数
else :
#循环,有一个相同的数计数容器加一
for j in range(i , num) :
if array[i] == array[j] :
temp += 1
#若不相同,直接跳出循环
else :
break
print(f"{array[i]}出现过{temp}次")
#相同数计数完成将容纳计数的数归零
temp = 0
search(num , array)
Demo63 打印不同的数
#初始化数据
num = int(input("请输入数的个数:"))
array = list(eval(input("请输入数据:")))
#使用集合的特性直接实现去重
array = list(set(array))
print(array)
Demo64 最大公约数II
def gcd(a, b):
'''
功能:求最大公约数
参数a:一个数
参数b:一个数
返回两个数的最大公约数
'''
if b == 0:
return a
else:
return gcd(b, a % b)
def multi_gcd(nums):
'''
功能:循环遍历求数组中每一个数共同的最大公约数
参数nums:传入数组
返回最大公约数
'''
result = nums[0]
for i in range(1, len(nums)):
result = gcd(result, nums[i])
return result
if __name__ == "__main__" :
nums = [12, 24, 36, 48 , 3]
print(multi_gcd(nums))
Demo65 打乱数组
def disarray(array) :
'''
功能:打乱数组
参数array表示传入数组
返回打乱的数组
'''
array = list(set(array))
return array
if __name__ == "__main__" :
array = input("请输入一共数组:")
print(disarray(array))
Demo66 是否有序
def is_non_decreasing(arr):
'''
功能:判断数组是否非单调递减
参数arr:传入数组
返回判断值,True为非单调递减,False为不是非单调递减
'''
for i in range(len(arr)-1):
if arr[i] > arr[i+1]:
return False
return True
def creat_arr(temp) :
'''
功能:创建数组并储存在列表里面
参数temp表示创建多少个数组
返回创建的列表
'''
array = []
for i in range(temp) :
num = int(input("请输入数组的长度:"))
arr = eval(input("请输入一个数组:"))
array.append(arr)
return array
if __name__ == "__main__" :
temp = int(input("请输入数组的个数:"))
array = creat_arr(temp)
for i in range(temp) :
if is_non_decreasing(array[i]) :
print("YES")
else :
print("NO")
Demo67 相似词
def judge(array1 , array2) :
'''
功能:判断单词是否一致
参数array1和array2是传入两个单词
返回判断值,相同返回True,不同返回False
'''
if len(array1) == len(array2) :
for i in array1 :
if i in array2 :
return True
else :
return False
else :
return False
if __name__ == "__main__" :
array1 = input("请输入一个单词:")
array2 = input("请输入第二个单词:")
if judge(array1 , array2) :
print("YES")
else :
print("NO")
Demo68 豆机器
import random
def top_plate(n, m):
"""
功能:计算每一个槽里的豆子数量,并打印每一颗豆子掉落的方向
参数n传入豆子个数
参数m传入槽数
返回每个槽中的豆子个数并用列表表现
原理:每一豆子碰到钉子有50%的概率向左滚动或者向右滚动,故使用一共数用来表示槽的位置,向某一方向滚动一次该数加一。
每有一颗豆子滚完,列表对应槽的数加一
"""
temp_num = 0
temp_arr = [0 for i in range(m)]
for i in range(n):
temp_num = 0
direction = []
for j in range(m - 1):
if random.random() > 0.5:
temp_num += 1
direction.append("R")
else:
direction.append("L")
print(f"第{i + 1}颗豆子掉落的方向为:{''.join(direction)}")
temp_arr[temp_num] += 1
return temp_arr
if __name__ == "__main__":
num_n = int(input("请输入豆子的个数:"))
num_m = int(input("请输入槽的个数:"))
print(f"每个槽中豆子数量分别为:{top_plate(num_n, num_m)}")
Demo69 更衣室难题
def door():
'''
功能:判断100个学生使用后还开启的门,开启的门用True表示,反之用False表示
返回值为包含True和False的列表
'''
temp_door = [False for i in range(100)]
for s in range(1, 101):
for l in range(s, 100, s + 1):
if s == 1:
temp_door[l - 1] = not temp_door[l - 1]
elif s == 2:
temp_door = [False for i in temp_door]
temp_door[1] = True
else:
temp_door[l - 1] = not temp_door[l - 1]
return temp_door
def pri(arr):
'''
功能:将包含True和False的列表中的每一个True翻译为下标加1的列表
参数arr表示传入包含True和False的列表
返回包含下标加1的列表
'''
door_id = []
for i in range(100):
if arr[i]:
door_id.append(i + 1)
return door_id
if __name__ == '__main__':
print(f"还开着的门有:{pri(door())}")
Demo70 合并两个有序数组
def array_merge(A , B) :
'''
功能:合并数组并且排序
参数传入两个数组
返回合并并且排好序的数组
'''
C = A + B
C = [int(i) for i in C]
for i in range(len(C) - 1) :
for j in range(len(C) - 1 , 0 , -1) :
if C[j] < C[j - 1] :
C[j] , C[j - 1] = C[j - 1] , C[j]
return C
if __name__ == "__main__" :
n_A = int(input("请输入A数组的长度:"))
A = eval(input("请输入A数组,用逗号分隔:"))
n_B = int(input("请输入B数组的长度:"))
B = eval(input("请输入B数组,用逗号分隔:"))
print(array_merge(A , B))
Demo71 数组划分
def separation_arr(A) :
'''
功能:划分数组并重新组合
参数传入数组
返回重组后的数组
'''
arr_1 = []
arr_2 = []
arr_3 = []
for i in A :
if i < A[0] :
arr_1.append(i)
elif i == A[0] :
arr_2.append(i)
else :
arr_3.append(i)
return arr_1 + arr_2 + arr_3
if __name__ == "__main__" :
n = int(input("请输入数组的长度:"))
A = eval(input("请输入一共数组,用逗号相隔:"))
print(separation_arr(A))
某个人进入如下一个棋盘中,要求从左上角开始走,最后从右下角出来(要求只能前进,不能后退),问题:共有多少种走法?
def bushu(l , h) :
'''
功能:计算走法
参数l和h用来传入宽和行高
返回走法
'''
if l == 1 :
return 1
if h == 1 :
return 1
else :
return bushu(l - 1 , h) + bushu(l , h - 1)
if __name__ == "__main__" :
l , h = map(int , (input("请输入棋盘的宽和行高,用空格分隔:").split(" ")))
print(bushu(l,h))
输入一行符号,以#结束,判断其中的对称符号是否匹配。对称符号包括:{ } 、 [ ] 、 ( )、 < >
def fanls(s) :
list1 = []
for i in s :
if i == "#" :
break
else :
list1.append(i)
return list1
def pandu(list1:list) :
list2 = []
list2 = list1.copy()
list2.reverse()
c = 0
for x in list2 :
if x == "}" :
list2[c] = "{"
elif x == "{" :
list2[c] = "}"
elif x == "[" :
list2[c] = "]"
elif x == "]" :
list2[c] = "["
elif x == "(" :
list2[c] = ")"
elif x == ")" :
list2[c] = "("
elif x == "<" :
list2[c] = ">"
elif x == ">" :
list2[c] = "<"
c += 1
if list1 == list2 :
return "yes"
else :
return "no"
if __name__ == "__main__" :
s = input("请输入一串符号以#结束")
list1 = fanls(s)
print(pandu(list1))
给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数
def renum(list1:list) :
c = 0
for i in list1 :
c = c + 1
list1.sort()
for x in range(c) :
if list1[x] == list1[x + 1] :
return list1[x]
if __name__ == "__main__" :
list2 = [1,2,3,4,5,6,7,7,8,9,10]
print(renum(list2))