前言:题目暂未开放,所以只写了题目大概的要求,开放后会补上题目详情。
题目概述:统计给出的字符串中的M和F并求比例。
根据给出样例数t进行循环,利用count函数统计字符串中的"M"和"F"进行解题即可。
while True:
try:
t = int(input())
while t > 0:
t -= 1
strings = input().strip()
m, f = strings.count('M'), strings.count('F')
cnt = m + f
print("%.2f %.2f" % (m / cnt, f / cnt))
except:
break
题目概述:给出n个数,判断有多少个数是重复出现的。
解题时为了逻辑简单,使用了一个字典和一个列表,分别来存储答到的次数和可能迟到的名单;当然也可以只使用一个字典完成解题,只需要把逻辑稍微修改一下即可。
n = int(input())
nums = list(map(int, input().split()))
lis, name = dict(), list()
cnt = 0
for num in nums:
k = lis.get(num, 0)
if k != 0 and num not in name:
cnt, _ = cnt + 1, name.append(num)
lis[num] = k + 1
print(cnt)
题目概述:统计字符串中有多少个"hnucm"(不区别大小写)。
将字符串所有字符转化成小写,然后使用count函数即可。
strings = input().lower()
print(strings.count("hnucm"))
题目概述:A和B从同起点相向跑步,A每分钟跑a米,B每分钟跑b米,A每跑4分钟休息一分钟,B每跑3分钟休息一分钟,问n分钟A能赶超B多少次。操场长400米。
其实这题我也没太看懂,想着是先算两个人跑步的距离相减再除以操场长度这样先试一试,结果过了。应该是一道数学题,不过我数学不好。
n, a, b = map(int, input().split())
cnt_A, cnt_B, run_A, run_B = 0, 0, 0, 0
for i in range(1, n + 1):
if cnt_A == 4:
cnt_A = 0
else:
run_A, cnt_A = run_A + a, cnt_A + 1
if cnt_B == 3:
cnt_B = 0
else:
run_B, cnt_B = run_B + b, cnt_B + 1
print((run_A - run_B) // 400)
题目概述:给一个矩阵,每一步可以遍历八个方向,问矩阵中存在多少个不完全相同的“520”序列,不存在“520”序列就输出“爱你无法说出口!”
从题目很容易看出来这是一道深度优先搜索的题目,注意搜索截至条件即可。
def dfs(x: int, y: int, index: int):
global cnt
if index == 3:
cnt += 1
else:
for dx in range(-1, 2):
for dy in range(-1, 2):
if dx == 0 and dy == 0:
continue
nx, ny = x + dx, y + dy
if 0 <= nx < n and 0 <= ny < m and maze[nx][ny] == ch[index]:
# print(f"{ch[index]}:({nx}, {ny}) {index}")
dfs(nx, ny, index + 1)
n, m = map(int, input().split())
maze, ch, cnt = [input().strip() for _ in range(n)], ['5', '2', '0'], 0
# print(maze)
for i in range(n):
for j in range(m):
if maze[i][j] == '5':
# print(f"5:({i}, {j})")
dfs(i, j, 1)
print(cnt) if cnt != 0 else print("爱你无法说出口!")
题目概述:同一时间给出多个作业,作业的所需时长不同,求最小的平均作业等待时间。
从题目很容易想到,这应该是在让我们选取一种作业调度的算法,来使平均等待时间最小;通过推理,不难发现题目应该是使用“短作业优先”的调度算法,来使平均等待时间最小;进行“短作业优先”的模拟即可。
n, time, cnt = int(input()), 0, 0
nums = sorted(list(map(int, input().split())))
for num in nums:
cnt, time = cnt + time + num, time + num
# print(cnt)
print("%.2f" % (cnt / n))
题目概述:有[1, 5, 10, 20, 50, 100]这几种面额的钱,问n块钱有几种找零方式。
仔细推敲题目,不难看出,这应该是一道动态规划的题目,并且是“数的划分”的变种。所以我们推算以后就能得到公式
maze[i][j] = maze[i][j - 1] if i - nums[j] < 0 else maze[i][j - 1] + maze[i - nums[j]][j]
这里引入了nums列表来减少二维列表的规模,降低空间和时间复杂度。
n = int(input())
nums = [0, 1, 5, 10, 20, 50, 100]
maze = [[0] * 7 for _ in range(n + 1)]
for i in range(7):
maze[0][i] = 1
for i in range(n + 1):
maze[i][1] = 1
# print(maze)
flag = True
for i in range(1, n + 1):
for j in range(2, 7):
maze[i][j] = maze[i][j - 1] if i - nums[j] < 0 else maze[i][j - 1] + maze[i - nums[j]][j]
print(maze[n][6])
(Tips:以下三题没ac,待题目开放,ac后更新,敬请谅解)
待更新、、、、、、
待更新、、、、、、
待更新、、、、、、