鱼C论坛

 找回密码
 立即注册
楼主: 新手·ing

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

   关闭 [复制链接]
发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-31 16:44:52 | 显示全部楼层
echoC 发表于 2018-4-12 14:28
能说说if前面是什么思路吗,感谢~

核心就是用x表达a和y,x是整数,保证y也是整数的情况下,求a即得结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-19 23:15:09 | 显示全部楼层
import math
y=0
z=0
for x in  range (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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-6 21:56:31 | 显示全部楼层
流月飞星 发表于 2017-4-13 10:46
这道题为什么要余1。。 求思路

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

使用道具 举报

发表于 2019-3-6 22:01:46 | 显示全部楼层
solomonxian 发表于 2017-4-19 18:36
刚学numpy,试着用一下

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

能解释一下那个一行的解答吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-7 20:56:11 | 显示全部楼层
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 ...

请原谅我笨
print [x*x-100 for x in range(100) if (x*x+168)**0.5 % 1 == 0]
SyntaxError: invalid syntax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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))
            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

发表于 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模块哈!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

既简单又容易理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 05:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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