鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 355

[复制链接]
 楼主| 发表于 2020-3-19 18:59:06 | 显示全部楼层

不要使用暴力解法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 18:59:48 | 显示全部楼层

用 math.pow() 不是更好吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:01:15 | 显示全部楼层
楼主来测一下我的有没有问题,我的好像大数据都能出结果,就不知道对不对了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:02:28 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-3-19 19:30 编辑

友情提示:

开平方请使用math.sqrt(num)
平方不要用num**2或pow(num,2),math.pow(num,2)值得一试,num*num效果最佳

别问我怎么知道的

本题最大测试用例为2147483646
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:04:02 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-3-19 19:02
自己的烂代码

力扣大神的解法

这位大神和我的想法不谋而合啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:04:57 | 显示全部楼层

兄弟再想想吧……只过了一半的测试用例
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:05:29 | 显示全部楼层
fan1993423 发表于 2020-3-19 19:04
这位大神和我的想法不谋而合啊

力扣大神的我还没发……那个是我写的……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:05:47 | 显示全部楼层
  1. def f355(c):
  2.     import math
  3.     d=int(math.sqrt(c)+1)
  4.     for i in range(d):
  5.         for j in range(i,d):
  6.             if i**2+j**2==c:
  7.                 return True
  8.     return False

  9. print(f355(5))
  10. print(f355(4))
  11. print(f355(3))
  12. print(f355(2))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:05:50 | 显示全部楼层
fan1993423 发表于 2020-3-19 18:57
还是错的,8是True

8不是False吗?哪两个数相加可以得到8?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:06:28 | 显示全部楼层
kinkon 发表于 2020-3-19 19:05
8不是False吗?哪两个数相加可以得到8?

2**2+2**2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:13:46 | 显示全部楼层
  1. def f355(x):
  2.     n=0
  3.     while True:
  4.         t=x-n**2
  5.         if t==0:
  6.             return True
  7.         elif t<0:
  8.             return False
  9.         else:
  10.             z=t**0.5
  11.             if int(z)==z:
  12.                 return True
  13.             else:
  14.                 n+=1
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:16:24 | 显示全部楼层

好吧,我改成True了,其实应该是错的,说的是a*a + b*b, 2*2+2*2都重复了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:17:51 | 显示全部楼层
fan1993423 发表于 2020-3-19 19:04
这位大神和我的想法不谋而合啊

哇!过奖过奖你也很棒棒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 19:20:12 | 显示全部楼层
kinkon 发表于 2020-3-19 19:16
好吧,我改成True了,其实应该是错的,说的是a*a + b*b, 2*2+2*2都重复了

它题目中说的是两个整数,并没有指明这两个整数不能相等
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 20:28:31 | 显示全部楼层
a = int(input('输入:'))
n=0
for i in range(a//2+1):
    for j in range(i,a//2+1):
        if i**2+j**2==a:
            print('输出:True')
            print('解释:%d*%d+%d*%d=%d'%(i,i,j,j,a))
            n=n+1
            break
if n==0:
    print('输出:Flase')

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 20:59:46 | 显示全部楼层
本帖最后由 whosyourdaddy 于 2020-3-22 10:54 编辑

import math
def func355(n):
    m = int(pow(n,0.5))
    for i in range(m,0,-1):
        for j in range(0,m+1):
            if pow(i,2)+pow(j,2)==n:
                return True
    return False

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 21:07:35 | 显示全部楼层
c= int(input("Enter a integer: "))
active = False
for a in range(1,c):
    for b in range(1,c):
        if (a*a + b*b) == c:
            active = True
            print(str(a)+'*'+ str(a) +"+" +str(b) + '*'+str(b)+"=" +str(c))
            break
    if active:
        break
print(active)

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 21:18:00 | 显示全部楼层
楼主已经写了一个初步的,在10楼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 21:28:03 | 显示全部楼层
  1. def f(x):
  2.     for i in range(int(x ** 0.5)+1):
  3.         a = (x - i*i) ** 0.5
  4.         n = str(a).split('.')
  5.         if n[1] == '0':
  6.             return True
  7.             break
  8.     return False
复制代码
笨的方法

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 21:44:33 | 显示全部楼层
  1. import math
  2. n = int(input('n = '))
  3. for i in range(n+1):
  4.     if (n-i**i) < 0:
  5.         print('False')
  6.         break
  7.     if str(math.sqrt(n-i*i)).split('.')[1] == '0':
  8.         print('True')
  9.         break
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-11 16:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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