鱼C论坛

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

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

[复制链接]
 楼主| 发表于 2020-3-21 17:59:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 18:00:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 18:00:51 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2020-3-21 18:01:39 | 显示全部楼层
黎影 发表于 2020-3-20 14:37
import math
number1 = input('输入:')
b = 0

输入 4 应该返回 True,0**2 + 2**2 = 4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 18:03:30 | 显示全部楼层

输入 4 应该返回 True,0**2 + 2**2 = 4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 18:04:12 | 显示全部楼层
阴阳神万物主 发表于 2020-3-20 16:05
难度评级:简单
要素分析:数论 循环 效率
自评:惨绝人寰的超大数据绝对超时。

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

使用道具 举报

 楼主| 发表于 2020-3-21 18:05:15 | 显示全部楼层
兔子BUNNY 发表于 2020-3-20 19:04
好吧,改了这么多次,还顺便加上了2这个特殊量,有点像数学学等差数列那样

输入 1 应该返回 True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 18:05:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 18:06:17 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 18:07:21 | 显示全部楼层
旅途Z 发表于 2020-3-20 21:35
from math import sqrt

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

使用道具 举报

发表于 2020-3-21 18:10:01 | 显示全部楼层
def f355(c):
    return sum([(c-i**2)**0.5%1==0 for i in range(int(c**0.5)+1)])!=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 19:33:08 | 显示全部楼层

哇,当时就感觉这个思路应该很快,没想到这么快
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 20:07:52 | 显示全部楼层

输入超大数据(> 10 ** 14)还是会超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 20:12:03 | 显示全部楼层
我卡在如果没有此数就结束这一点上了
a=int(input("请输入一个非负整数"))
b=0
c=0
if b**2+c**22==a:
    print(f"{b}^2+{c}^2={a}")
else:
   for b in range(0,(int(a**0.5+1)),1):
       for c in range(0,b,1):
           if b**2+c**22==a:
               print(f"{b}^2+{c}^2={a}")
               break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 20:20:29 | 显示全部楼层
ab16838123 发表于 2020-3-21 20:12
我卡在如果没有此数就结束这一点上了


好像可以再精炼一点
我的分析:
如果:b^2+c^2=a
那么b<=a^0.5,c<=a^0.5
则可以确定出b的整数范围和c的整数范围,还是for循环简单粗暴,其他高级的语法我不会,那个【如果没有整数平方之和则打印“找不到”】这点太难了
a=int(input("请输入一个非负整数"))
for b in range(0,(int(a**0.5+1)),1):
   for c in range(0,b,1):
       if b**2+c**2==a:
           print(f"{b}^2+{c}^2={a}")
           break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-22 02:02:40 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2020-3-22 02:07 编辑


运用了一下平面几何,效率飙升。
现在输入 1000000000000000 也就稍微慢一些
def solve(c:'int >= 0')->bool:
    for a in range(1+int((2**0.5)*(c**0.5)/2)):
        b = (c-a**2)**0.5
        if int(b)==b:
            print(a,b)
            return True
    else:return False
if __name__ == '__main__':
    print('示例1 输出:',solve(5))
    print('示例2 输出:',solve(3))
圆的特性,加上勾股定理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-22 18:24:29 From FishC Mobile | 显示全部楼层
zltzlt 发表于 2020-3-21 18:03
输入 4 应该返回 True,0**2 + 2**2 = 4

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

使用道具 举报

发表于 2020-3-22 18:27:31 From FishC Mobile | 显示全部楼层
心情不好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 22:29:32 | 显示全部楼层
flamezyy 发表于 2020-3-21 19:33
哇,当时就感觉这个思路应该很快,没想到这么快

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

使用道具 举报

发表于 2020-3-26 18:20:00 | 显示全部楼层
zltzlt 发表于 2020-3-21 17:51
输入 1 应该返回 True

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-24 22:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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