鱼C论坛

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

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

[复制链接]
发表于 2020-3-31 22:12:02 | 显示全部楼层
  1. def f364(target):
  2.     target = abs(target)
  3.     n = 0
  4.     for i in range(1, target+2):
  5.         n += i
  6.         if n == target:
  7.             return i
  8.         elif n > target and (n-target)%2==0:
  9.             return i
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-31 23:26:21 | 显示全部楼层
先占个楼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 01:43:58 | 显示全部楼层
  1. #使用递归的思路解题,不知道速度会不会拖得太慢
  2. def f364(num, list1 = [1], count = 1):
  3.     if num in list1:
  4.         return count
  5.     else:
  6.         list2=[]
  7.         count += 1
  8.         for each in list1:
  9.             list2.append(each + count)
  10.             list2.append(each - count)

  11.         return f364(num, list2, count)
复制代码


评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-4-1 13:23:42 | 显示全部楼层
TJBEST 发表于 2020-3-31 17:35
我昨天的363题做出来了,我写在这里也给测一下吧
旧 363题

通过了,52 ms

你在原 363 题回复一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 13:25:26 | 显示全部楼层
chen971130 发表于 2020-3-31 18:51
# 思路:先一直走到target之前或之后,(或直接到target),
# 然后分别反复移动到target(每移动一格需 ...

解答错误

输入:-1
输出:-3
预期结果:1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 13:26:18 | 显示全部楼层
Herry2020 发表于 2020-3-31 20:07
def fun364(target):
    sum = 0
    n = 1

解答错误

输入:-1
输出:6
预期结果:1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 13:26:49 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 13:27:25 | 显示全部楼层
sunrise085 发表于 2020-3-31 21:05
我把下午写的修改了一下,while循环最多需要两次

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

使用道具 举报

 楼主| 发表于 2020-4-1 13:27:48 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 13:28:16 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 13:57:22 | 显示全部楼层
  1. def f(n):
  2.     x = 0
  3.     while x*(x+1)/2 < n or (x*(x+1)/2-n)%2 or (x*(x+1)/2-n)/2 == 2:
  4.         x += 1
  5.     return x
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-1 16:19:44 | 显示全部楼层
zltzlt 发表于 2020-4-1 13:25
解答错误

输入:-1
  1. def min_step(target):
  2.     target = abs(target)
  3.     count = 1
  4.     sum1 = 0
  5.     while sum1 < target:
  6.         sum1 = sum1 + count
  7.         count += 1
  8.     if sum1 == target:
  9.         print(count - 1)
  10.     else:
  11.         number1 = (target-sum1+count-1)*2 + count - 2
  12.         number2 = (sum1-target)*2 + count - 1
  13.         print(min([number1,number2]))
  14. min_step(3)
复制代码


那就再加个绝对值就好啦

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-1 16:45:05 | 显示全部楼层
  1. def fun364(target):
  2.         t = abs(target)
  3.         k = 0
  4.         s = 0
  5.         while s < t:
  6.             k += 1
  7.             s += k
  8.         dt = s - t
  9.         if dt % 2 == 0:
  10.             return k
  11.         else:
  12.             if k % 2 == 0:
  13.                 return k + 1
  14.             else:
  15.                 return k + 2
复制代码

363题实在是看不懂题目,只好来做364

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-4-1 17:46:30 | 显示全部楼层

解答错误

输入:-1
输出:2
预期结果:1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 17:48:29 | 显示全部楼层

解答错误

输入:2
输出:4
预期结果:3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 17:53:04 | 显示全部楼层
chen971130 发表于 2020-4-1 16:19
那就再加个绝对值就好啦

解答错误

输入:4
输出:4
预期结果:3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 18:59:40 | 显示全部楼层
蒋博文 发表于 2020-4-1 16:45
363题实在是看不懂题目,只好来做364

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

使用道具 举报

发表于 2020-4-1 19:40:47 | 显示全部楼层
本帖最后由 风魔孤行者 于 2020-4-1 19:44 编辑
zltzlt 发表于 2020-4-1 17:48
解答错误

输入:2

  1. def f(n):
  2.     n = abs(n)
  3.     x = 0
  4.     while x*(x+1)/2 < n or (x*(x+1)/2-n)%2:
  5.         x += 1
  6.     return x
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 20:37:47 | 显示全部楼层
zltzlt 发表于 2020-4-1 17:46
解答错误

输入:-1

题目中,这句话<第 n 次移动(从 1 开始)可以走 n 步。>意思理解有偏差,理解为:每次第一步都先移动到1的意思了。只需将代码中函数内list1的初始值[1]改为[-1,1]即可。
  1. def f364(num, list1 = [-1,1], count = 1):
  2.     if num in list1:
  3.         return count
  4.     else:
  5.         list2=[]
  6.         count += 1
  7.         for each in list1:
  8.             list2.append(each + count)
  9.             list2.append(each - count)

  10.         return f364(num, list2, count)
复制代码

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

使用道具 举报

发表于 2020-4-2 18:02:24 | 显示全部楼层

这个为什么可以这样算啊,真的神奇
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 17:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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