题目如下
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
把 00 ~ 99 这 1010 个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。
比如:
0, 36, 5948721
再比如:
1098524736
1, 25, 6390784
0, 4, 289, 15376
…
注意,00 可以作为独立的数字,但不能作为多位数字的开始。 分组时,必须用完所有的数字,不能重复,不能遗漏。
如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?
题目解析
官方解法我太笨,没有理解,只能根据他的方法进行自己思考,首先是进行全排列,把所有的数字组合全部遍历,然后进行分割,这里分割并不是傻傻的分割,一定要有技巧,我们从第0个数开始,如果往后开始加的话出现过一次完全平方数,那就记住坐标,进行递归计算。其次还需要与一个辅助函数判断是否为完全平方数,其次还要考虑什么时候返回啊,如果第一个数为0怎么办啊。
代码如下:
import itertools
import math
a = [i for i in range(10)]
ans = 0
def judge(n):
return math.sqrt(n) == int(math.sqrt(n))
def dfs(x, i):
global ans
if i == 10:
ans += 1
return
if a[i] == 0:# 第一个数字如果为零,也就只能单个使用
if i == 0:
dfs(0, i+1)
return
sum = 0
for