新手·ing 发表于 2017-3-25 09:56:29

Python:每日一题 3

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

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

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

新手·ing 发表于 2017-3-25 10:00:16

import math
for i in range(10000):
    #转化为整型值
    x = int(math.sqrt(i + 100))
    y = int(math.sqrt(i + 268))
    if x * x == i + 100 and y * y == i + 268:
      print(i)

我的解答!

冬雪雪冬 发表于 2017-3-25 10:33:24

本帖最后由 冬雪雪冬 于 2017-3-25 10:38 编辑

我也写一个
list1 = [ i * i for i in range(85, 9, -1)]
for i in range(len(list1)):
    for j in range(i + 1, len(list1)):
      if list1 - list1 == 168:
            print(list1 - 268)
      elif list1 - list1 > 168:
            break

linqing3600 发表于 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)

新手·ing 发表于 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: ...

谢谢支持点我上车

ooxx7788 发表于 2017-3-25 11:20:35

for x in range(-100, 10000):
    a = (x + 100) ** 0.5
    b = (x + 268) ** 0.5
    if not a % 1 and not b % 1:
      print(x, a, b)

-99 1.0 13.0
21 11.0 17.0
261 19.0 23.0
1581 41.0 43.0

你们忽略了-99也是整数哦!

新手·ing 发表于 2017-3-25 11:31:27

ooxx7788 发表于 2017-3-25 11:20
你们忽略了-99也是整数哦!

可以可以
666

jerryxjr1220 发表于 2017-3-25 19:54:45

一行代码求解:
>>> print
[-99, 21, 261, 1581]

新手·ing 发表于 2017-3-25 22:03:16

jerryxjr1220 发表于 2017-3-25 19:54
一行代码求解:
>>> print
[-99, 21, 261, 1 ...

大佬
受在下一拜

新手·ing 发表于 2017-3-25 22:28:33

冬雪雪冬 发表于 2017-3-25 10:33
我也写一个

感谢版主支持!

gopythoner 发表于 2017-4-1 00:09:42

我写的是这个
看了后面的答案,发现少了-99
def test3():
    for i in range(10000):
      if (i+100)**0.5 % 1 == 0 and (i+268)**0.5 % 1 == 0:
            print (i)
i的取值范围不好定,这个直接关系到了最终结果
for i in range(10000):这个地方不知道怎么改才好

ButcherRabbit 发表于 2017-4-10 19:04:55

import math
for i in range(10000):
    x = math.sqrt(i + 100)
    y = math.sqrt(i + 268)
    if int(x) == x and int(y) == y:
      print(i)
    else:
      continue

难道我理解错误?

pizzapasta 发表于 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)

余欲渔 发表于 2017-4-11 13:41:50

本帖最后由 余欲渔 于 2017-4-11 13:58 编辑


def cs(i=1):
    if (i+100)**0.5==int((i+100)**0.5) and (i+268)**0.5==int((i+268)**0.5):
      print(i)
      return 1
    return 0
for i in range(1,10000,10):
    #if cs(i) :break
    cs(i)
== RESTART: C:\Users\ASUS\AppData\Local\Programs\Python\Python35-32\test.py ==
21
261
1581
>>>

余欲渔 发表于 2017-4-11 13:57:59

gopythoner 发表于 2017-4-1 00:09
我写的是这个
看了后面的答案,发现少了-99



负数的平方也是正数,那最多就是到-100了

流月飞星 发表于 2017-4-13 10:46:11

gopythoner 发表于 2017-4-1 00:09
我写的是这个
看了后面的答案,发现少了-99



这道题为什么要余1。。 求思路

源稚空 发表于 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)

seasonjj 发表于 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个的

solomonxian 发表于 2017-4-19 18:36:27

刚学numpy,试着用一下

import numpy as np

a = np.arange(-100,10000) # 负数不能开方
b = np.sqrt(a+100)
c = np.sqrt(a+268)
print(a)
前面那老兄的一行真厉害,换个角度切入更方便了

# 别人的一行解答,变成了(k-100)、k、(k+168) 这三个数
print()

solomonxian 发表于 2017-4-19 18:38:12

流月飞星 发表于 2017-4-13 10:46
这道题为什么要余1。。 求思路

整数%1得0, 小数会带尾巴
页: [1] 2 3 4 5 6 7
查看完整版本: Python:每日一题 3