鱼C论坛

 找回密码
 立即注册
查看: 11467|回复: 136

[技术交流] Python:每日一题 3

   关闭 [复制链接]
发表于 2017-3-25 09:56:29 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 新手·ing 于 2017-3-25 09:58 编辑

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

欢迎小伙伴们,一起答题!
如果你有能力,欢迎加入我们!
已经上车老司机:@ooxx7788
点我上车

本帖被以下淘专辑推荐:

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

使用道具 举报

 楼主| 发表于 2017-3-25 10:00:16 | 显示全部楼层
  1. import math
  2. for i in range(10000):
  3.     #转化为整型值
  4.     x = int(math.sqrt(i + 100))
  5.     y = int(math.sqrt(i + 268))
  6.     if x * x == i + 100 and y * y == i + 268:
  7.         print(i)
复制代码


我的解答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 6 反对 0

使用道具 举报

发表于 2017-3-25 10:33:24 | 显示全部楼层
本帖最后由 冬雪雪冬 于 2017-3-25 10:38 编辑

我也写一个
  1. list1 = [ i * i for i in range(85, 9, -1)]
  2. for i in range(len(list1)):
  3.     for j in range(i + 1, len(list1)):
  4.         if list1[i] - list1[j] == 168:
  5.             print(list1[i] - 268)
  6.         elif list1[i] - list1[j] > 168:
  7.             break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 5

使用道具 举报

发表于 2017-3-25 10:42:09 | 显示全部楼层
import math
for i in range(1,10001,1):
    if math.sqrt(i+100)%1 == 0 and math.sqrt(i+268)%1 == 0:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 4 反对 0

使用道具 举报

 楼主| 发表于 2017-3-25 11:02:15 | 显示全部楼层
linqing3600 发表于 2017-3-25 10:42
import math
for i in range(1,10001,1):
    if math.sqrt(i+100)%1 == 0 and math.sqrt(i+268)%1 == 0: ...

谢谢支持点我上车
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-25 11:20:35 | 显示全部楼层
  1. for x in range(-100, 10000):
  2.     a = (x + 100) ** 0.5
  3.     b = (x + 268) ** 0.5
  4.     if not a % 1 and not b % 1:
  5.         print(x, a, b)
复制代码

  1. -99 1.0 13.0
  2. 21 11.0 17.0
  3. 261 19.0 23.0
  4. 1581 41.0 43.0
复制代码


你们忽略了-99也是整数哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2017-3-25 11:31:27 | 显示全部楼层
ooxx7788 发表于 2017-3-25 11:20
你们忽略了-99也是整数哦!

可以可以
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-25 19:54:45 From FishC Mobile | 显示全部楼层
一行代码求解:
>>> print [x*x-100 for x in range(100) if (x*x+168)**0.5 % 1 == 0]
[-99, 21, 261, 1581]

评分

参与人数 2荣誉 +2 鱼币 +3 贡献 +1 收起 理由
bobfenglin + 1 + 2 + 1 厉害
新手·ing + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 6 反对 0

使用道具 举报

 楼主| 发表于 2017-3-25 22:03:16 | 显示全部楼层
jerryxjr1220 发表于 2017-3-25 19:54
一行代码求解:
>>> print [x*x-100 for x in range(100) if (x*x+168)**0.5 % 1 == 0]
[-99, 21, 261, 1 ...

大佬
受在下一拜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-3-25 22:28:33 | 显示全部楼层

感谢版主支持!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-1 00:09:42 | 显示全部楼层
我写的是这个
看了后面的答案,发现少了-99
  1. def test3():
  2.     for i in range(10000):
  3.         if (i+100)**0.5 % 1 == 0 and (i+268)**0.5 % 1 == 0:
  4.             print (i)
复制代码

i的取值范围不好定,这个直接关系到了最终结果
for i in range(10000):这个地方不知道怎么改才好

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!自己研究~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-4-10 19:04:55 | 显示全部楼层
  1. import math
  2. for i in range(10000):
  3.     x = math.sqrt(i + 100)
  4.     y = math.sqrt(i + 268)
  5.     if int(x) == x and int(y) == y:
  6.         print(i)
  7.     else:
  8.         continue
复制代码

难道我理解错误?

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-11 08:28:07 | 显示全部楼层
import math

for x in range(10000):
    a = math.sqrt(x+100)
    b = math.sqrt(x+268)
    if ((a).is_integer() == True) and ((b).is_integer() == True):
        print (x)

点评

我很赞同!: 5.0
我很赞同!: 5
对不起,没鱼币了...  发表于 2017-4-11 15:53
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-4-11 13:41:50 | 显示全部楼层
本帖最后由 余欲渔 于 2017-4-11 13:58 编辑

  1. def cs(i=1):
  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.         return 1
  5.     return 0
  6. for i in range(1,10000,10):
  7.     #if cs(i) :break
  8.     cs(i)
复制代码
  1. == RESTART: C:\Users\ASUS\AppData\Local\Programs\Python\Python35-32\test.py ==
  2. 21
  3. 261
  4. 1581
  5. >>>
复制代码


点评

对不起,没鱼币了...  发表于 2017-4-11 15:53
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 13:57:59 | 显示全部楼层
gopythoner 发表于 2017-4-1 00:09
我写的是这个
看了后面的答案,发现少了-99

负数的平方也是正数,那最多就是到-100了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-13 10:46:11 | 显示全部楼层
gopythoner 发表于 2017-4-1 00:09
我写的是这个
看了后面的答案,发现少了-99

这道题为什么要余1。。 求思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-17 21:19:53 | 显示全部楼层
import math
for a in range(1,10000):
    x = int(math.sqrt(a+100))
    y = int(math.sqrt(a+268))
    if x*x==(a+100) and y*y==(a+268):
        print(a)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-18 18:25:24 | 显示全部楼层
import math
for i in list(range(10000)):
    a = str(math.sqrt(i+100))
    b = str(math.sqrt(i+268))
    if len(a) == len(b) == 4 :
        print(i)

一直想写isinstance(a,int) == True and isinstance(b,int) == True,
但发现math.sqrt()返回的是一个float类型,所以想判断整数的float类型是4个字符长度,非整数平方根肯定是超过4个的

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2017-4-19 18:36:27 | 显示全部楼层
刚学numpy,试着用一下

  1. import numpy as np

  2. a = np.arange(-100,10000) # 负数不能开方
  3. b = np.sqrt(a+100)
  4. c = np.sqrt(a+268)
  5. print(a[np.where(np.logical_or(b%1, c%1)==0)])
复制代码

前面那老兄的一行真厉害,换个角度切入更方便了

  1. # 别人的一行解答,变成了(k-100)、k、(k+168) 这三个数
  2. print([x*x-100 for x in range(100) if (x*x+168)**0.5 % 1 == 0])
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-4-19 18:38:12 | 显示全部楼层
流月飞星 发表于 2017-4-13 10:46
这道题为什么要余1。。 求思路

整数%1得0, 小数会带尾巴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 14:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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