鱼C论坛

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

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

[复制链接]
 楼主| 发表于 2020-3-12 16:57:10 | 显示全部楼层
阴阳神万物主 发表于 2020-3-12 13:50
难度评级:简单
要素分析:模拟,循环
感受:总感觉可以有公式直接算出剩下的数字,但是我没有探索出来。 ...

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

使用道具 举报

发表于 2020-3-12 17:01:06 | 显示全部楼层
楼主来测一下我的,我没用公式哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-12 17:01:46 | 显示全部楼层
mdphd 发表于 2020-3-12 15:17
这样应该可以了

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

使用道具 举报

发表于 2020-3-12 17:26:03 | 显示全部楼层
fan1993423 发表于 2020-3-12 16:55
看来12楼的公式是对的了,我没找到公式,刚才测了一下,大数据能出来

嗯,我编程序时没看他的,确实这位厉害,比我早点。我想了半天
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 17:31:45 | 显示全部楼层
6楼和12楼厉害,我还在钻死胡同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 17:32:26 | 显示全部楼层
  1. def fun350(n, m):
  2.     a = 0
  3.     for i in range(n + 1):
  4.         a = (a + m) % n
  5.     return a
复制代码

总觉得楼主测试我的时间总是到了次日的次日

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-12 17:52:26 | 显示全部楼层

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

使用道具 举报

发表于 2020-3-12 18:02:17 | 显示全部楼层
fan1993423 发表于 2020-3-12 16:52
不知道对不对,先写一个

那么快就想出好办法,虽然没公式效率高,测试是正确的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 18:10:18 | 显示全部楼层
TJBEST 发表于 2020-3-12 17:26
嗯,我编程序时没看他的,确实这位厉害,比我早点。我想了半天

说一下 公式原理,不太懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 18:18:50 | 显示全部楼层
TJBEST 发表于 2020-3-12 17:26
嗯,我编程序时没看他的,确实这位厉害,比我早点。我想了半天

太强了,就是公式看不懂。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 18:27:11 | 显示全部楼层
阴阳神万物主 发表于 2020-3-12 13:50
难度评级:简单
要素分析:模拟,循环
感受:总感觉可以有公式直接算出剩下的数字,但是我没有探索出来。 ...

大佬能解释下为什么m要先减1呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 18:28:43 | 显示全部楼层
本帖最后由 ouyunfu 于 2020-3-12 18:51 编辑
  1. def f350(n:int,m:int)->int:
  2.     i,k,s=0,0,[]
  3.     while len(s)+1<n:
  4.         if i==n:
  5.             i=0
  6.         if i in s:
  7.             k-=1
  8.         if k==m-1:
  9.             s.append(i)
  10.             k=-1
  11.         i+=1
  12.         k+=1
  13.     return [i for i in range(n) if i not in s][0]

  14. print(f350(5,3))
  15. print(f350(10,17))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 18:37:00 | 显示全部楼层
fan1993423 发表于 2020-3-12 18:10
说一下 公式原理,不太懂

三言两语说不清楚啊,我用是告诉你 你自己揣摩一下
假设f(n,m)表示n个数 (下标0,1,2,3,....n-1)时,最后剩下的数
则有 递归式
f(n,m)=(f(n-1,m)+m)%m
其实也不难 就是 每次踢掉一个元素后 它下一个元素 变成新的0号位

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-12 19:11:21 | 显示全部楼层
  1. def q350(m,n):
  2.     list1 = list(range(n))
  3.     list2 = []
  4.     numN = n - 1
  5.     numM = m
  6.     while numN:        
  7.         long = len(list1)   
  8.         indexn = numM%long-1
  9.         value = list1[indexn]   
  10.         list1.remove(value)
  11.         if (len(list1) == 3) and (indexn ==2):
  12.             list1 = list1
  13.         else:
  14.             list2 = list1[(indexn):]+ list1[:(indexn)]        
  15.             list1 = list2
  16.         
  17.         numN -= 1

  18.     return(list1[0])
复制代码


评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-12 19:44:32 | 显示全部楼层
TJBEST 发表于 2020-3-12 18:37
三言两语说不清楚啊,我用是告诉你 你自己揣摩一下
假设f(n,m)表示n个数 (下标0,1,2,3,....n-1)时,最 ...

对,我最先也是这样想的,甚至也想到了用递归来做这道题,但是想到递归速度可能会慢,我后面那个思路也是这种新0号位思想,只不过没用递归。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-12 20:10:12 | 显示全部楼层
本帖最后由 Grrr 于 2020-3-13 12:25 编辑

刚学习的新手 能帮忙看看我这个是啦出错了么?
  File test350.py", line 16, in <module>
    test350(3,5)
  File "test350.py", line 4, in test350
    while len(list1)>1:
TypeError: object of type 'NoneType' has no len()

更新修改
  1. def test350(m,n):
  2.     list1 =list(range(n))
  3.         
  4.     while len(list1)>1:
  5.         if len(list1)>=m:
  6.             list1=list1[m:]+list1[:(m-1)]

  7.         else:
  8.             k=m%len(list1)
  9.             list1=list1[k:]+list1[:(k-1)]
  10.             

  11.     print(list1)

  12.    
  13. test350(3,5)
  14. test350(17,10)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-12 20:51:24 | 显示全部楼层
本帖最后由 l0stparadise 于 2020-3-12 22:22 编辑
  1. def f350(n,m):
  2.     list1=[i for i in range(n)]
  3.     while True:
  4.         if m%len(list1):
  5.             new_list=list1[m%len(list1):]
  6.             new_list.extend(list1[0:m%len(list1)-1])
  7.             list1.pop(m % len(list1) - 1)
  8.             list1=new_list
  9.         else:
  10.             list1.pop(m % len(list1) - 1)
  11.         if len(list1) == 1:
  12.             return list1[0]
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-12 21:02:05 | 显示全部楼层
Grrr 发表于 2020-3-12 20:10
刚学习的新手 能帮忙看看我这个是啦出错了么?
  File test350.py", line 16, in
    test350(3,5)
  1. list12.extend(list11)
  2.             list1=list12
复制代码

可是试试这样写,执行list12.extend(list11)后返回值是None,直接赋值给list1就是list1=None,或者直接写list1=list12+list11,效果一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 22:03:48 | 显示全部楼层
  1. n=int(input("请输入组成圆环的数字数量并回车:"))
  2. m=int(input("请输入删除数字的间距并回车:"))
  3. a=[]
  4. for i in range(0,n):
  5.     a.append(i)
  6. print("数字组成的初始圆环是%s"%(a))
  7. while len(a)>1:
  8.     k=m%len(a)
  9.     if k==0:
  10.         b=a[:(len(a)-1)]
  11.         c=a[len(a):]
  12.         a=c+b
  13.         print("依次删除数字后圆环是%s"%(a))
  14.     else:
  15.         b=a[:(k-1)]
  16.         c=a[k:]  
  17.         a=c+b
  18.         print("依次删除数字后圆环是%s"%(a))
  19. print("最后剩余的数字是%s"%(a))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-12 22:03:50 From FishC Mobile | 显示全部楼层
python.zzl 发表于 2020-3-12 21:02
可是试试这样写,执行list12.extend(list11)后返回值是None,直接赋值给list1就是list1=None,或者直接 ...

明白了 很清楚 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 03:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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