python上机作业(约瑟夫环问题)

给n个学生编号1~n,按顺序围成一圈,按1~3报数,凡报到3者出列,从1开始报数,直到最后剩下一个人,计算剩下这个人是第几号学生。

直接上代码吧

第一种方法:

num = int(input("请输入学生人数:"))
list = [i for i in range(1,num+1)]
index = 0
# print(list)
while 1:
    temp = list.pop(0)
    index += 1
    if index == 3:
        index = 0
        continue
    list.append(temp)
    if len(list) == 1:
        break
print("剩下学生的编号:",end='')
print(list)

第二种方法 :

n = int(input("请输入学生人数:"))
a = [1 for i in range(1,n+1)]
# print(a)
i = 0
s = 0
while True:
    s = s + a[i]
    if s == 3:
        a[i] = 0
        s = 0
        n = n-1
        if n == 1:
            break
    i = i + 1
    if i == len(a):
        i = 0
print("剩下学生的编号:",end='')
print(a.index(1) + 1)

第三种方法:

n = int(input("请输入学生人数:"))
a = [i for i in range(1,n+1)]

while 1:
    a.append(a[0])
    a.append(a[1])
    a.pop(0)
    a.pop(0)
    a.pop(0)
    if len(a) == 1:
        break
print("剩下学生的编号:", end='')
print(a)

第4种方法:

s = int(input("请输入有多少个学生:"))
a = [i for i in range(1,s+1)]
l = 0
while len(a) > 1:
    i = 0
    while i < len(a):
        l += 1
        if l == 3:
            del a[i]
            l = 0
        else:
            i += 1
print("剩下学生的编号:", end='')
print(a)

运行结果都是一样的,但是效率就不大一样了。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wu小燕呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值