法无定法,在于因时因势
难如填空题,也有巧妙的方法去暴力与枚举
确定边界,巧妙判断
输出一部分,找规律
2024年pythonA组省赛A题
2024年pythonA组省赛A题

思路分析:
由于2*2和1*1的正方形的数量都很多,所以不可能一个个枚举进行判断
,那么我们可以思考如果全部的正方形都组合在一起,能够拼接的理论的最大的边长是多少?我们从这个最大的理论边长逐步往小判断
这里我们应该注意到,如果边长是奇数的话,说明最外面的半圈是由1*1的正方形所包围的,如果是偶数,那么就可以先判断2*2是否够,如果不够,再用1*1补上
如果a为奇数,那么所需的1*1的块数就是2*a-1

import math
a = 7385137888721
b = 10470245
maxq = math.sqrt(4*a+b)
need1 = 2*(maxq-1)+1
print(need1)
maxq = maxq-1
need2 = (maxq//2)**2
print(need2)
2024年pythonA组省赛B题
2024年pythonA组省赛B题

思路分析:
由于数字很大,所以不太可能逐一暴力,又因为是求解数目的题目,所以可以考虑先输出1000范围获得更大一点范围的结果,查看是否有规律!
def cheng(i):
ans = 1
for i in range(1,i+1):
ans*=i
return ans
for i in range(1001):
if ((1+i)*i//2 - cheng(i))%100 == 0:
print(i,end=" ")
print()
a = 2024041331404202
zheng = a // 200
yu = a % 200
print(zheng,yu)
ans = 2 + 4* zheng
print(ans)