鱼C论坛

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

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

[复制链接]
发表于 2017-9-16 08:09:24 | 显示全部楼层
  1. people = [1, 2, 4, 5, 6, 7, 8, 9, 10, 12, 25]

  2. count = 0
  3. each = 0

  4. while len(people) > 1:
  5.     count += 1
  6.     each = each + 1   
  7.     if each > len(people):
  8.         each = each % len(people)

  9.     if count % 3 == 0:
  10.         out = people.pop(each - 1)
  11.         print out
  12.         each = each - 1
  13.         if each == len(people): each = 0
  14.         count = 0
  15.         if len(people) == 1:
  16.             break

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

使用道具 举报

发表于 2017-9-28 12:58:59 | 显示全部楼层
本帖最后由 aixuexi82 于 2017-9-28 13:05 编辑
  1. num = int(input('请输入人数(大于1人):'))
  2. queue = list(range(num))

  3. if num <= 1:
  4.     print('输入人数错误!')

  5. while queue:
  6.     if len(queue) >= 3:
  7.         queue.pop(2)
  8.         queue = queue[2:] + queue[:2]
  9.     elif len(queue) == 2:
  10.         print('最后剩下No.%d' % (queue[1]+1))
  11.         break
复制代码



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

使用道具 举报

发表于 2018-2-24 00:14:24 | 显示全部楼层
def Rlist():
                list1 = []
                import random
                number = random.randint(7,16)
                for i in range(0,10):
                                list1.append(i+1)
                return list1
def indexon(list2):
                count = 1
                math = 0
                while(len(list2) >= 2):
                                if count == 3:
                                                print(list2)
                                                count = 0
                                                if len(list2) > 3:
                                                                del list2[math]
                                                                math -= 1
                                                else:
                                                                del list2[0]
                                if math == len(list2):
                                                math = -1
                                count += 1
                                math += 1
                                print(math)
                return list2
count = 1
while(True):
                list1 = Rlist()
                #print(len(list1))
                list2 = indexon(list1)
                print(list2)
                count += 1
                guess = input(' ')
还是有很多的不做之处目前测出9和10个人可以正常执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-25 22:48:53 | 显示全部楼层
  1. import random
  2. rd = random.randint(20,100)
  3. print('系统随机生成%d人围成一圈' % rd)
  4. l = list(range(1,rd + 1))
  5. a = 0
  6. while(len(l) >= 2):
  7.     for i in l:
  8.         a += 1
  9.         if a == 3:
  10.             l.remove(i)
  11.             a = 0
  12. print(l)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-26 08:53:21 | 显示全部楼层
本帖最后由 z1446773686 于 2018-2-26 08:58 编辑
z1446773686 发表于 2018-2-24 00:14
def Rlist():
                list1 = []
                import random


修改后的:
def Rlist():
                list1 = []
                import random
                number = random.randint(0,10)
                print(number)
                for i in range(0,number):
                                list1.append(i+1)
                return list1
def indexon(list2):
                #math2 = []
                #count2 = []
                count = 1
                math = 0
                while(len(list2) > 1):
                                if math > (len(list2) - 1):
                                                math = 0
                                if count == 3:
                                                #print('list2:',list2,len(list2))
                                                #print('count2:' , count2,len(count2))
                                                #print('math2:', math2)
                                                count = 0
                                                del list2[math]
                                                math -= 1
                                #count2.append(count)
                                count += 1
                                math += 1
                                #math2.append(math)
                return list2
while(True):
                list1 = Rlist()
                #print(len(list1))
                list2 = indexon(list1)
                print('list2:',list2,len(list2))
                guess = input(' ')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 12:59:02 | 显示全部楼层
def cycle_pass(list1,k):
        n = 0
        while len(list1) > 1:
                list2 = list1.copy()
                for each in list2:
                        if each != list2[-1]:
                                n +=1
                                if n % k == 0:
                                        print(n,each)
                                        list1.remove(each)
                list1.reverse()
                print(list1)
        return list1
       
print(cycle_pass([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],3))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 21:03:30 | 显示全部楼层
  1. '''
  2. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子
  3. 问最后留下的是原来第几号的那位。
  4. '''
  5. def funcall(n):
  6.     lista=[x for x in range(1,n+1)]
  7.     while len(lista)>3:
  8.         #每次循环删除第三个元素,并把前两个放到最后
  9.         lista=(lista+lista[:2])[3:]
  10.     return lista[1]

  11. print(funcall(100))      
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-29 14:11:21 | 显示全部楼层
冬雪雪冬 发表于 2017-3-31 23:21
又仔细看了我自己的程序,发现一个BUG,当num=2时列表下标越界。修改过的:

膜拜大佬····如此简洁·····其中的n=(n+2)%len(list1)怎么理解的啊,小白搞不懂了。
另外我试了1000000个人的时候要7分多钟才出结果,代码这么简洁为啥要那么久啊。
多少人围成一圈:1000000
最后留下的是原来第637798号
0:07:48.181779
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-10 16:05:17 | 显示全部楼层
#有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
n=int(input("排队人数:"))
shuzu=[]
a=0
for i in range(n):
    a+=1
    shuzu.append(a)
print(shuzu)
#生成n个元素的数组
b=2
while len(shuzu)>1:
    shuzu.pop(b)
    b=(b+2)%len(shuzu)
print(shuzu)

#倒数第二行的代码不太理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-8 09:27:19 | 显示全部楼层
n=1000#多少人围成一圈
nums=list(range(1,n+1))
k=3#报数到3
m=0
num=0#出局多少个
while num<n-1:#只剩下一个时终止循环
    num=0
    for i in range(0,n):
        if nums[i]!=0:
            if m+1>=k:#循环报数1,2,3...k
                nums[i]=0#报数为k出局,置0
                m=0
            else:
                m=m+1
                continue
        else:
            num=num+1

print ("最后留下的是:",list(filter(None,nums)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-28 12:34:09 | 显示全部楼层
  1. n = int(input('请输入人数:'))
  2. a = list(range(1,n+1))
  3. while len(a)>1:
  4.     for x in range(1,3):
  5.         a.append(a.pop(0))
  6.     a.pop(0)
  7. print('最后留下的是',a,'号位的那位',sep="")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 14:37:04 | 显示全部楼层
有理解錯嗎?每三個人踢出一個,多踢個幾輪最後只剩下第1,2號兩個人???
還是要想成,繞圈圈,尾巴會接到頭??


list1 = []
for i in range(1 , 101):
    list1.append(i)

while len(list1) >= 1:
    temp = len(list1) - (len(list1) // 3)
    for n in range(1 , (len(list1) + 1 - temp)):
        list1.pop(2*n)

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

使用道具 举报

发表于 2018-8-29 18:59:48 | 显示全部楼层
n = int(input('请输入1个正整数:'))
lst=[]
for i in range(1,n+1):
    lst.append(i)
while lst[-2]!=lst[-1]:
    for a, b in enumerate(lst):
        if (a+1)%3==0:
            pass
        else:
            lst.append(b)
print("最后留下的是原来第%d号的人:" %(lst[-1]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-10 03:14:26 | 显示全部楼层
  1. n = int(input("please input n:  "))
  2. k = int(input("please input k:  "))

  3. people = []
  4. for p in range(1,n+1):
  5.     people.append(int(p))
  6. i = 0

  7. while True:
  8.     out = []
  9.     l = len(people)
  10.     if l < 2:
  11.         print(people[0])
  12.         break
  13.     for c in range(l):
  14.         i += 1
  15.         if i%k == 0:
  16.             out.append(people[c])
  17.     for men in out: people.remove(men)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-12 22:57:12 | 显示全部楼层
'''

题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
'''
person = int(input("give your person:"))
test_person=[x+1 for x in range(person)]
print(test_person)
back_name = [0]*person
cont_number = []
print(back_name)
while len(cont_number) < len(back_name)-1:
    for i in range(person):
        if back_name[i] == 0:
            if test_person[i] % 3 == 0:
                back_name[i] = 1
                cont_number.append(i)
            else:
                test_person[i]+=(back_name.count(0)%3)
        else:
            continue
    print(back_name)
print(back_name.index(min(back_name))+1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-30 18:13:14 | 显示全部楼层
def c(n):
        global man_list
        out_list = []
        for i in range(n,len(man_list)+n):
                if i%3 == 0:
                        out_list.insert(0,i-n)
                if i == len(man_list)+n-1:
                        global start
                        start = (i%3)+1
                        for each in out_list:
                                del man_list[each]

man_list = ['a','b','c','d','e','f','g']
number = {}
for i in range(1,len(man_list)+1):
        number[man_list[i-1]] = i

start = 1
if len(man_list) != 1:
        c(start)
        while 1:
                if len(man_list) != 1:
                        c(start)
                else:
                        break
print(number[man_list[0]])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-4 23:07:37 | 显示全部楼层
  • def people(num_l,n):
  •     for i in range(1,n+1):
  •         num_l.append(i)
  •     return num_l
  • def num(num_l,n):
  •     count = 0
  •     j = 0
  •     while n > 1:
  •         for i in range(j,n):
  •             count += 1
  •             if count == 3:
  •                 count = 0
  •                 print("原始编号 %d 号淘汰!!!"%num_l)
  •                 del num_l                        
  •                 if i == n-1:
  •                     j = 0
  •                 else:
  •                     j = i
  •                 n -= 1
  •                 break
  •             if i == n-1:
  •                 j = 0
  •                 break
  •     return num_l
  • num_list = []
  • n = int(input("请输入游戏人数:"))
  • people(num_list,n)
  • num(num_list,n)
  • print("最后留下的是原来的第 %d 号!"%num_list[0])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-4 15:40:31 | 显示全部楼层
  1. num = int(input("请输入总人数:"))

  2. arr = [x for x in range(1, num+1)]
  3. print(arr)

  4. rm = 0
  5. lp = 0
  6. ix = 0

  7. while rm < num - 1:
  8.     if arr[ix] != 0:
  9.         lp += 1
  10.     if lp == 3:
  11.         arr[ix] = 0
  12.         rm += 1
  13.         lp = 0
  14.     ix += 1
  15.     if ix == num:
  16.         ix = 0
  17. print("最后剩下的人是原来的第", arr.index(max(arr))+1, "号。")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-17 20:46:47 | 显示全部楼层
def baoshu(num_rest):
    if len(num_rest)<=2:
        return num_rest[0]
    elif len(num_rest)==3:
        num_rest.pop()
        return(baoshu(num_rest))
    else:
        num_rest1=num_rest[3:]
        num_rest1.extend(num_rest[0:2])
        return(baoshu(num_rest1))

num=int(input("请输入人数:"))
num_ini=list(range(num))
for i in range(len(num_ini)):
    num_ini[i]=num_ini[i]+1
print(num_ini)
num_rest=baoshu(num_ini)
print(num_rest)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-17 21:00:50 | 显示全部楼层
刚才的错了,这个才对
def baoshu(num_rest):
    if len(num_rest)==1:
        return num_rest[0]
    elif len(num_rest)==2:
        return num_rest[1]
    elif len(num_rest)==3:
        num_rest.pop()
        return(baoshu(num_rest))
    else:
        num_rest1=num_rest[3:]
        num_rest1.extend(num_rest[0:2])
        return(baoshu(num_rest1))

num=int(input("请输入人数:"))
num_ini=list(range(1,num+1))
print(num_ini)
num_rest=baoshu(num_ini)
print(num_rest)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 21:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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