
算法:第38次CCF计算机软件能力认证题目解析
题目1:正态分布

简单数学计算问题,首先将给出的转换为标准正态分布。转换公式为,此时等价于,其中。(均值为0、标准差为1的标准形式)。
根据计算出的标准正态分布进行查表:
行号由m值的整数部分和十分位共同决定,列号由m值的百分位决定。比如m=1.23对应的行号为1×10+2+1=13,列号为3+1=4。
代码:
import sys
data = sys.stdin.read().split()
k = int(data[0])
item = 1
results = []
for _ in range k:
miu = int(data[item + 1])
sig = int(data[item + 2])
n = int(data[item +3])
item = item + 3
m = (n - miu)/sig
# 小数部分
xiaoshu = m - int(m)
# 十分位和百分位
tenths = int(xiaoshu * 10 + 1e-9)
hundredths = int((xiaoshu * 100 - tenths * 10) + 1e-9)
# 计算行和列
row = int(m) + tenths * 0.1
col = hundredths * 0.01
results.append(f"{row} {col}")
for res in results:
print(res)
题目2:机器人复健指南

典型的图遍历问题,要求计算在n×n的棋盘上,机器人从起始位置出发,在k步内能够到达的所有不同方格数量。采用广度优先搜索(BFS)算法,注意处理重复和边界即可。
Breadth-first search (BFS) is an algorithm for searching a tree data structure for a node that satisfies a given property.
代码:
from collections import deque
# 定义8个方向的移动向量
px = [1, 2, 2, 1, -1, -2, -2, -1] # x方向移动
py = [2, 1, -1, -2, -2, -1, 1, 2] # y方向移动
def main():
n, k = map(int, input().split())
x, y = map(int, input().split())
# 初始化访问标记矩阵和队列
st = [[False] * (n + 1) for _ in range(n + 1)]
q = deque()
# 标记起始位置并加入队列
st[x][y] = True
q.append(((x, y), k))
ans = 1 # 起始位置已经访问
while q:
(nx, ny), nk = q.popleft() # 当前位置和剩余步数
# 尝试8个方向的移动
for i in range(8):
tx = nx + px[i] # 目标x坐标
ty = ny + py[i] # 目标y坐标
tk = nk - 1 # 剩余步数减1
# 检查是否越界
if tx < 1 or ty < 1 or tx > n or ty > n:
continue
# 检查是否已访问
if st[tx][ty]:
continue
# 标记为已访问,增加计数
st[tx][ty] = True
ans += 1
# 如果还有剩余步数,加入队列继续搜索
if tk != 0:
q.append(((tx, ty), tk))
print(ans)
if __name__ == "__main__":
main()
题目3:消息解码
题目





解析
提醒
等待更新~~
评论
评论加载中...