HNUCM-天梯赛选拔赛
创始人
2024-05-31 17:53:03
0次

前言:题目暂未开放,所以只写了题目大概的要求,开放后会补上题目详情。

问题A:

题目概述:统计给出的字符串中的M和F并求比例。

思路:

根据给出样例数t进行循环,利用count函数统计字符串中的"M"和"F"进行解题即可。

代码:

while True:try:t = int(input())while t > 0:t -= 1strings = input().strip()m, f = strings.count('M'), strings.count('F')cnt = m + fprint("%.2f %.2f" % (m / cnt, f / cnt))except:break

问题B:

题目概述:给出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)

问题C:

题目概述:统计字符串中有多少个"hnucm"(不区别大小写)。

思路:

将字符串所有字符转化成小写,然后使用count函数即可。

代码:

strings = input().lower()
print(strings.count("hnucm"))

问题D:

题目概述: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 = 0else:run_A, cnt_A = run_A + a, cnt_A + 1if cnt_B == 3:cnt_B = 0else:run_B, cnt_B = run_B + b, cnt_B + 1
print((run_A - run_B) // 400)

问题E:

题目概述:给一个矩阵,每一步可以遍历八个方向,问矩阵中存在多少个不完全相同的“520”序列,不存在“520”序列就输出“爱你无法说出口!”

思路:

从题目很容易看出来这是一道深度优先搜索的题目,注意搜索截至条件即可。

代码:

def dfs(x: int, y: int, index: int):global cntif index == 3:cnt += 1else:for dx in range(-1, 2):for dy in range(-1, 2):if dx == 0 and dy == 0:continuenx, ny = x + dx, y + dyif 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("爱你无法说出口!")

问题F:

题目概述:同一时间给出多个作业,作业的所需时长不同,求最小的平均作业等待时间。

思路:

从题目很容易想到,这应该是在让我们选取一种作业调度的算法,来使平均等待时间最小;通过推理,不难发现题目应该是使用“短作业优先”的调度算法,来使平均等待时间最小;进行“短作业优先”的模拟即可。

代码:

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))

问题G:

题目概述:有[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后更新,敬请谅解)

问题H:

待更新、、、、、、

问题I:

待更新、、、、、、

问题J:

待更新、、、、、、

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...