15046058134 发表于 2018-11-26 21:51:49

import math
for a in range(1,10000000,1):
    c = a + 100
    b = a + 268
    if math.sqrt(c)%1 == 0 and math.sqrt(b)%1 ==0:
      print(a)

小明禅师 发表于 2018-11-28 14:11:57

import math as m
for i in range(1,10001,1):
    if m.sqrt(i+100)%1 == 0 and m.sqrt(i+268)%1 == 0:
      print(i)

double-lee 发表于 2018-12-3 16:19:36

for i in range(10000):
    a = int(math.sqrt(i + 100))
    b = int(math.sqrt(i + 268))
    if a ** 2 == i+100 and b ** 2 == i + 268:
      print(i)

晓程序 发表于 2018-12-10 16:51:36

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

sunrise085 发表于 2018-12-19 15:07:38

普通版:先开平方取整,然后在将结果平方看看是否是原数,以判断该是是否是整数的平方。循环范围应该是从(1-100)=-99到10001。这个是比较基础的版本。程序如下:import math
for i in range(-99,10001):
        temp1 = int (math.sqrt (i + 100))
        temp2 = int (math.sqrt (i + 268))
        if temp1 ** 2 == i + 100 and temp2 ** 2 == i + 268:
                print i
改进版:其实判断一个数是否是一个整数的平方,可以不用这么麻烦,直接开平方对1求余即可。程序如下:
import math
for i in range (-99,10001):
        if math.sqrt (i + 100) % 1 == 0 and math.sqrt (i + 268) % 1 == 0:
                print i
进阶版:以上两版本其实相差无几。进阶版需要大幅度缩减运行时间。以上版本都是判断一个数是不是整数的平方,是正向考虑问题,我们可以逆向考虑问题,直接判断两个整数的平方差值。这样循环次数就由10000+缩减到100了。程序如下:
import math
for i in range (1,100):
        if math.sqrt (i * i + 168) % 1 == 0:
                print i * i - 100
此外还有变态版,可以将进阶版修改为一行代码的变态版,变态版其实和这个进阶版一样,虽然缩减代码行数,但是却降低了程序的可读性。程序如下:
print [ i * i - 100 for i in range (1,100) if (i * i + 168) ** 0.5 % 1 == 0]

nnxiaod 发表于 2018-12-31 13:56:50

from math import sqrt


def do1():
    for x in range(10000):
      if sqrt(x + 100).is_integer() and sqrt(x + 268).is_integer():
            print(x)


if __name__ == '__main__':
    do1()

nnxiaod 发表于 2018-12-31 16:44:52

echoC 发表于 2018-4-12 14:28
能说说if前面是什么思路吗,感谢~

核心就是用x表达a和y,x是整数,保证y也是整数的情况下,求a即得结果。

Xna_MT 发表于 2019-2-19 23:15:09

import math
y=0
z=0
for x inrange (1,10000):
y=int(math.sqrt(x + 100))
z=int(math.sqrt(x +268))
if y*y==x+100 and z*z==x+268:
   print(x)

Sneakerjj 发表于 2019-3-4 13:55:32

import math

for i in range(-100,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,x,y)

新手zz 发表于 2019-3-6 21:56:31

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

为了是个整数

新手zz 发表于 2019-3-6 22:01:46

solomonxian 发表于 2017-4-19 18:36
刚学numpy,试着用一下

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

能解释一下那个一行的解答吗

lwy520 发表于 2019-3-7 19:24:02

import math
for i in range(10000):
    if (int((math.sqrt(i+100)))**2 == (i+100)) & (int((math.sqrt(i+268)))**2 == (i+268)):
      break

if i==9999:
    if (int((math.sqrt(i+100)))**2 == (i+100)) & (int((math.sqrt(i+268)))**2 == (i+268)):
      print(i)
    else:
      print("0~10000之间无合适值,请扩大范围查找!")
else:
    print(i)

lwy520 发表于 2019-3-7 20:42:52

import math
x=100
y=268
i=0
j=-int(math.sqrt(x))
while(int(math.sqrt(y+i)-math.sqrt(x+i))):
    if (math.sqrt(y+i) % 1 ==0) & (math.sqrt(x+i) % 1 ==0):
      print(i)
    i=int(math.sqrt(x)+j)**2-x
    j+=1

lwy520 发表于 2019-3-7 20:56:11

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

请原谅我笨{:5_96:}
print
SyntaxError: invalid syntax

yu123py 发表于 2019-4-26 16:19:22

本帖最后由 yu123py 于 2019-4-26 16:21 编辑

import math
n = 0
while n < 10001:
    if math.sqrt(n + 100) - int(math.sqrt(n + 100)) == 0 and math.sqrt(n + 268) == int(math.sqrt(n + 268)):
      print(n)
    n += 1

小猪猪妍 发表于 2019-7-4 09:08:17

import math
n=1
while (1):
    a=n+100
    b=n+268
    n+=1
    if math.sqrt(a)-int(math.sqrt(a))==0:
      if math.sqrt(b)-int(math.sqrt(b))==0:
            print(n)
            print(a,b,math.sqrt(a),math.sqrt(b))
            

小猪猪妍 发表于 2019-7-4 09:11:57


import math
n=-100
while (1):
    n+=1
    a=n+100
    b=n+268
    if math.sqrt(a)-int(math.sqrt(a))==0:
      if math.sqrt(b)-int(math.sqrt(b))==0:
            print(n)
         # print(a,b,math.sqrt(a),math.sqrt(b))
            

糠爸 发表于 2019-7-4 12:16:08

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


for value in range(10001):
        temp1 = value + 100
        temp2 = value +268
        for check1 in range(1001):
                if temp1 == check1 ** 2:
                        for check2 in range(1001):
                                if temp2 == check2 ** 2:
                                        print(value)
见笑!没有学到math模块哈!

山岂乎不在高 发表于 2019-7-5 18:10:01

import math
def nn():
    m = int(pow(268,1/2))+1
    for i in range(m,200):
      b = i*i
      if b - (i-1)*(i-1)> 268:
            print("此题无解")
            return
      j = i+1
      while j*j-b<268:
            if j*j-b == 168:
                return i*i-100
            j += 1

if __name__ == '__main__':
    a = nn()
    print('要求的数是:',a)
            

无法如水 发表于 2019-7-10 16:48:24

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



既简单又容易理解{:5_92:}
页: 1 2 3 4 5 [6] 7
查看完整版本: Python:每日一题 3