鱼C论坛

 找回密码
 立即注册
查看: 4283|回复: 7

[技术交流] python小练习(031):找出连续数字的平方和是回文的数字

[复制链接]
发表于 2016-11-30 19:16:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python小练习(030),传送门

今天的小练习来一道有趣的数学题:找出连续数字的平方和又是回文的数字

595 这个回文数很有趣,它可以被写作连续数字的平方数之和:6**2 + 7**2 + 8**2 + 9**2 + 10**2 + 11**2 + 12**2。

1000 以下一共有 11 个这样可以写作连续数字平方和的回文数,这 11 个数字的和是 4164。

这11个数分别是多少?分别由哪些连续数的平方和构成?

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-30 20:27:51 | 显示全部楼层
预留2楼
提示:
这题之所以说比较简单是因为让我们找的是连续数的平方和,这样我们只需要确定连续数的开始和结尾就能知道计算的范围了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-30 21:15:18 | 显示全部楼层
本帖最后由 冬雪雪冬 于 2016-11-30 21:20 编辑

用个简单粗暴的方法:
注: 最后一行的2应该是平方,但发帖变成了2。这个字符是chr(178).
sq = [x * x for x in range(1, 23)]
n = [str(x) for x in range(1, 23)]
for i in range(22):
    for j in range(i + 2, 23):
        k = sum(sq[i: j])
        if k > 999:
            break
        if str(k) == str(k)[::-1]:
            print('2 + '.join(n[i: j]) + '2 =', k)
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-30 21:29:50 | 显示全部楼层
刚看到第6课的新手表示瑟瑟发抖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-1 21:13:33 | 显示全部楼层
解答:
#coding:utf-8
def is_cycle(n):
    return True if str(n) == str(n)[::-1] else False

limit = 1000
window_s = 1
window_e = int(limit ** 0.5)
while window_s<window_e:
    s = window_s*window_s
    for i in range(window_s+1,window_e):
        s += i*i
        if s >= limit:
            break
        if is_cycle(s):
             print (s, list(range(window_s,i+1)))
    window_s += 1
输出:
5 [1, 2]
55 [1, 2, 3, 4, 5]
505 [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
818 [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
77 [4, 5, 6]
636 [4, 5, 6, 7, 8, 9, 10, 11, 12]
595 [6, 7, 8, 9, 10, 11, 12]
181 [9, 10]
434 [11, 12, 13]
313 [12, 13]
545 [16, 17]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-21 08:20:46 From FishC Mobile | 显示全部楼层
for i in range(1,32):
    sum=0
    for j in range(i,32):
        sum+=j**2
        if j>i and sum<1000 and str(sum)==str(sum)[::-1]:
            print(sum)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-21 09:02:34 From FishC Mobile | 显示全部楼层
for i in range(1,32):
    sum=0
    for j in range(i,32):
        sum+=j**2
        if j>i and sum<1000 and str(sum)==str(sum)[::-1]:
            print(sum)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-24 13:10:39 | 显示全部楼层
    if str(n) == str(n)[::-1]:
        return True
    return False
# 1000 以下一共有 11 个这样可以写作连续数字平方和的回文数,下方的总和是968
c = [ i*i for i in range (1,23)]
# c = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484]

result = []
for i in range (22):
    sum_1 = 0
    for j in range (i,22):
        sum_1 += c[j]
        if i2i(sum_1) and j > i and sum_1 <= 1000:
            result.append([c[i], c[j], sum_1])


for i in range(11):
    for j in range(2):
        result[i][j] = result[i][j] ** (1/2)
        result[i][j] = int(result[i][j])
#print(result)

for i in range (11):
    while result[i][-2] - result[i][-3] > 1:
        result[i].insert(-2,result[i][-3] + 1)

    print ( result[i][-1],result[i][:-1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 05:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表