鱼C论坛

 找回密码
 立即注册
查看: 1427|回复: 8

[已解决]每日一题 第三题

[复制链接]
发表于 2018-1-14 20:09:01 | 显示全部楼层 |阅读模式

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

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

x
题目:一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少?
程序分析:在10000以内判断,将该数加上100后再开方,加上268后再开方,如果开方后的结果满足如下条件,即是结果。


for a in range(1, 10001):
    for x in range(1, 10001):
        for y in range(1, 10001):
            if (a + 100) == x * x and (a + 268) == y * y:
                print(a)

请问各位老师,我这样写的代码 有问题吗?
点了运行之后一直在运行,也不出结果,也不报错?
最佳答案
2018-1-14 21:26:46
本帖最后由 冰封雪舞 于 2018-1-14 22:21 编辑

for a in range(1, 1000):
    for x in range(10, 100):
        for y in range(15, 100):
            
            if (a+100) == x*x and (a+268)==y*y:
                print(a)
把范围缩小验证了下,算出两个数
21
261
循环太多了,需要验证计算的次数太多,计算机都快罢工了,所以我给你写了个另外的简单点供参考希望对兄弟你有所帮助.
for a in range(1, 10001):
    if int((a+100)**0.5) == (a+100)**0.5 and int((a+268)**0.5)==(a+268)**0.5:
        print(a)
以上程序应该简单易懂吧,如有不明白的,请及时提出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-14 20:27:06 | 显示全部楼层
本帖最后由 orino 于 2018-1-14 20:31 编辑
  1. import math

  2. for i in range(10001):
  3.     if math.sqrt(i+100)%1==0 and math.sqrt(i+268)%1==0:
  4.         print(i)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-14 20:27:50 | 显示全部楼层
你这样做三重循环的效率怕是不要太低哦,等半天不出结果也很正常啊,直接开平方判断结果是不是整数就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-14 21:11:29 | 显示全部楼层
手算都算出来了,21

21+100=121=11平方
21+268=289=17平方
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-14 21:26:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 冰封雪舞 于 2018-1-14 22:21 编辑

for a in range(1, 1000):
    for x in range(10, 100):
        for y in range(15, 100):
            
            if (a+100) == x*x and (a+268)==y*y:
                print(a)
把范围缩小验证了下,算出两个数
21
261
循环太多了,需要验证计算的次数太多,计算机都快罢工了,所以我给你写了个另外的简单点供参考希望对兄弟你有所帮助.
for a in range(1, 10001):
    if int((a+100)**0.5) == (a+100)**0.5 and int((a+268)**0.5)==(a+268)**0.5:
        print(a)
以上程序应该简单易懂吧,如有不明白的,请及时提出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-1-14 21:51:21 | 显示全部楼层
本帖最后由 8306最硬 于 2018-1-14 21:54 编辑

每个循环算10000遍,三个循环,复杂度是10000的三次方,即一共要算1000000000000遍,每个循环里最大还要算两次10000 * 10000
emmmmmm......
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-15 11:39:25 | 显示全部楼层
谢谢各位老师 后来我就想明白了 程序本身没有问题 可就是循环次数太多 计算量太大
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-15 13:08:40 | 显示全部楼层
  1. for i in range(1, 10000):
  2.     if (i+100)**0.5 == int((i+100)**0.5) and (i+268)**0.5 == int((i+268)**0.5):
  3.         print(i)
  4. #  21
  5. #  261
  6. #  1581
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 22:28:51 | 显示全部楼层
什么时候可以像大佬们一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-5 22:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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