蓝桥杯python第十三届国赛5月29日中高年组 围圈数数 数到几就出局 要想全剩男生 男生应该坐在哪

又是健忘的一天哈,题号不记得了,sorry sorry 。(我又来发库存了)

目录

题目:

输入描述

输出描述

样例输入

样例输出

思路

 代码

小结


题目:

某班级男生人数为X人,女生人数为Y人,现全班同学围成一个圆圈,并按照顺时针方向为每名同学编号(从1到X+Y)。现给出一个正整数K(2<K<(X+Y)),从编号为1的同学开始顺时针方向报数,报到K的同学退出圆圈,下一名同学继续从1报数,再次报到K的同学退出圆圈。如此循环,直到剩余人数为X时游戏结束。

请你计算出游戏开始时X名男生分别应该排在什么位置,才能保证每次离开的都是女生,游戏结束时剩余X人都是男生。并将游戏开始时每名男生的位置编号按照从小到大顺序输出。

例如:X=5,Y=3,K=3,8名同学按照如下顺序排列,可以使3轮报数过后最后剩余的5名同学都为男生(蓝色为男生位置,红色为女生位置)。

故5名男同学的编号分别为2,4,5,7,8。

输入描述

输入三个正整数X,Y,K(3≤X≤100,3≤Y≤100,2<K<(X+Y)),X表示男生人数,Y表示女生人数,报数为K的同学退出圆圈,三个正整数之间以一个空格隔开

输出描述

将每名男生位置编号按照从小到大的顺序输出,编号之间以一个空格隔开

样例输入

5 3 3

样例输出

2 4 5 7 8

(感谢@SHARHS@HENRY友友的题目支持)

思路

在以前,我写了下面的文章。现在的题,是它的进阶版。下面的文章是介绍如何只留最终的胜利者,而现在我们要留的是所有的男生。其实不要被男生这个词框住,细想来,其实只是要留下男生数量的人罢了。所以在遍历的条件上我们要进行一些改动。

重中之重:出局小朋友的索引号=(出局小朋友的索引号+数到几出局)%小孩们总数-1

python_报数游戏_经典考题_四级_一只悦儿的博客-CSDN博客_python报数游戏python_报数游戏_经典考题_四级https://blog.csdn.net/weixin_46710559/article/details/121868960 

 代码

def fn(n,K,X):  # 定义一个函数,n参数是所有小朋友的人数,K是数到几出局,X是要剩几个人
    t=0  # t代表索引号
    l=list(range(1,n+1))  # 定义一个列表,代表所有小朋友
    if n==1:  # 如果你只有一个小朋友就别玩了,直接返回l就好了
        return l
    for i in range(n-X):  # 要遍历n-X次,才能保证最后会剩X人
        t=(t+K)%len(l)-1  # 这种题的要点就是这个,记好吧,t就等于要出局的小朋友的索引号
        del l[t]  # t索引对应的小朋友出局啦
        if t<0:  # 如果t到头了
            t=0  # 再从头开始
    return l  # 最终返回幸存小朋友编号,也就是如果想都是男生,男生坐的位置
j=list(eval(input()))  # 输入
X=j[0]  # X是男生人数
Y=j[1]  # Y是女生人数
K=j[2]  # Z是数到几出局
l=fn(X+Y,K,X)  # 调用函数 一共有X+Y个小朋友,数到Z出局,要剩男生的人数
print(','.join([str(i) for i in l]))  # 最后把结果输出

小结

有些题真的是让人匪夷所思。你只能背下来。考试前的做题量是十分重要的。最后,还是祝各位拥有美好的一天,拥有灿烂的前程

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值