题目
题干较长,请自行查看2022年12月的T3
思路
这个题没多少大的数据结构算法,读懂题目翻译就行
其中有几个注意点,一不小心100就变40了
- 注意点:
- 读题读题读题,读题很重要, 问题描述中的第六条有两条范围限制,一不小心漏一个就变40了
- python直接用int是取整(小数位全舍了),可以用int(x+0.5)手动达到四舍五入的效果(这个要是忘了也就变40了哇哇哇)
- 还有列表的格式化输出要注意一下,用“*”只是拆包,双层列表的话产生的是里面一个个的列表(也就是说这个时候是好几个数据,不能再用一次“*“,即不能用”**"打印双层列表!
- 还要注意的是T=2输出最终解码结果时,要创建新数组(不要偷懒用原数组赋值,因为公式里面还要用!emmm……这就是不好好看题看一半就开始写的后果……)
代码
写的时候说试试不找他M赋值时的变换规律直接全部64的坐标输入进去看看行不行,结果还真过了哈哈😄
下次再找找它的规律试试
import math
Q = [0]*8
for i in range(8):
Q[i] = list(map(int,input().split()))
n = int(input()) # 扫描数据的个数
T = int(input()) # 要进行的任务
data = list(map(int,input().split()))
M = [[0]*8 for i in range(8)]
lst = [(0,0),(0,1),(1,0),(2,0),(1,1),(0,2),(0,3),(1,2),(2,1),(3,0),(4,0),(3,1),(2,2),(1,3),(0,4),(0,5),(1,4),(2,3),(3,2),(4,1),(5,0),(6,0),(5,1),(4,2),(3,3),(2,4),(1,5),(0,6),(0,7),(1,6),(2,5),(3,4),(4,3),(5,2),(6,1),(7,0),(7,1),(6,2),(5,3),(4,4),(3,5),(2,6),(1,7),(2,7),(3,6),(4,5),(5,4),(6,3),(7,2),(7,3),(6,4),(5,5),(4,6),(3,7),(4,7),(5,6),(6,5),(7,4),(7,5),(6,6),(5,7),(6,7),(7,6),(7,7)]
if T == 0:
for i in range(len(data)):
M[lst[i][0]][lst[i][1]] = data[i]
for i in range(8):
print(*M[i])
else:
for i in range(len(data)):
M[lst[i][0]][lst[i][1]] = data[i]*Q[lst[i][0]][lst[i][1]]
if T == 1:
for i in range(8):
print(*M[i])
exit(0)
elif T==2:
MM = [[0]*8 for i in range(8)]
for i,j in lst:
SU = 0
for u in range(8):
sumv=0
au = pow(1/2,1/2) if u==0 else 1
for v in range(8):
av = pow(1/2,1/2) if v==0 else 1
sumv +=au*av*M[u][v]*math.cos(math.pi/8*(i+0.5)*u)*math.cos(math.pi*v*(j+1/2)/8)
SU += sumv
MM[i][j] = int(SU/4+128+0.5)
if MM[i][j] > 255:
MM[i][j] = 255
elif MM[i][j] < 0:
MM[i][j] = 0
# print(*MM)
for i in range(8):
print(*MM[i])