zoukankan      html  css  js  c++  java
  • 圆圈中最后剩下的数

    题目描述

    每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!^_^)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)
     
    如果没有小朋友,请返回-1
    Python 代码
     1 # -*- coding:utf-8 -*-
     2 class Solution:
     3     def LastRemaining_Solution(self, n, m):
     4         # write code here
     5         if n < 1 or m < 1:  # m-1出列
     6             return -1
     7         if n == 1:
     8             return 0
     9         lst = [i for i in range(n)]
    10         i = 0
    11         while len(lst) > 1:
    12             if i + m - 1 < len(lst) - 1:
    13                 lst.pop(i+m - 1)
    14                 i = i + m - 1
    15             elif i + m - 1 == len(lst) - 1:
    16                 lst.pop(i + m - 1)
    17                 i = 0
    18             else:
    19 
    20                 lst.pop((i + m - 1) % len(lst))
    21                 i = (i + m - 1) % (len(lst)+1)
    22         return lst[0]

    注意点

    1.使用一个变量记录删除的索引

    2.考虑三种情况,下一个小于列表长度-1,等于列表长度-1,大于列表长度-1

    3.第三种情况,先删除元素,长度少了,再赋值时,当前长度要加1,取余计算后,才是删除的元素索引

  • 相关阅读:
    第五课 按键控制文本
    第四课:怎么去掉Activity的标题和邮件图标-20160705
    第三课:控件的使用及按键响应-20160705
    第二课:Android Studo 各文件作用-20160705
    第一课:如何创建Android Studo 工程-20160705
    JTAG各类接口针脚定义及含义
    c# 定时器的实现
    二进制及十进制文件的读写方法
    c# 检测设备改变
    Vue(四)事件和属性
  • 原文地址:https://www.cnblogs.com/shuangcao/p/12831632.html
Copyright © 2011-2022 走看看