鱼C论坛

 找回密码
 立即注册
查看: 4784|回复: 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个数分别是多少?分别由哪些连续数的平方和构成?

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

用个简单粗暴的方法:
注: 最后一行的2应该是平方,但发帖变成了2。这个字符是chr(178).
  1. sq = [x * x for x in range(1, 23)]
  2. n = [str(x) for x in range(1, 23)]
  3. for i in range(22):
  4.     for j in range(i + 2, 23):
  5.         k = sum(sq[i: j])
  6.         if k > 999:
  7.             break
  8.         if str(k) == str(k)[::-1]:
  9.             print('2 + '.join(n[i: j]) + '2 =', k)
复制代码
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-30 21:29:50 | 显示全部楼层
刚看到第6课的新手表示瑟瑟发抖
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  4. limit = 1000
  5. window_s = 1
  6. window_e = int(limit ** 0.5)
  7. while window_s<window_e:
  8.     s = window_s*window_s
  9.     for i in range(window_s+1,window_e):
  10.         s += i*i
  11.         if s >= limit:
  12.             break
  13.         if is_cycle(s):
  14.              print (s, list(range(window_s,i+1)))
  15.     window_s += 1
复制代码

输出:
  1. 5 [1, 2]
  2. 55 [1, 2, 3, 4, 5]
  3. 505 [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
  4. 818 [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
  5. 77 [4, 5, 6]
  6. 636 [4, 5, 6, 7, 8, 9, 10, 11, 12]
  7. 595 [6, 7, 8, 9, 10, 11, 12]
  8. 181 [9, 10]
  9. 434 [11, 12, 13]
  10. 313 [12, 13]
  11. 545 [16, 17]
复制代码
小甲鱼最新课程 -> https://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)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-21 09:02:34 From FishC Mobile | 显示全部楼层
  1. for i in range(1,32):
  2.     sum=0
  3.     for j in range(i,32):
  4.         sum+=j**2
  5.         if j>i and sum<1000 and str(sum)==str(sum)[::-1]:
  6.             print(sum)
复制代码
小甲鱼最新课程 -> https://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])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-30 04:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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