zoukankan      html  css  js  c++  java
  • 孩子们的游戏(圆圈中最后剩下的数)

    题目描述
    每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)

    如果没有小朋友,请返回-1

    时间超限了。。。。。。。。。。。。。。

    package com.zyb.pric;
    
    public class Solution {
    
        public static boolean IsEnd(int []arr){
            int cnt=0,len=arr.length;
            for(int i=0;i<len;i++){
                if(arr[i]==-1){
                    cnt++;
                }
            }
            return (cnt>=len-1)? true:false;
        }
        public static int LastRemaining_Solution(int n, int m) {
    
            if(m>n){
                m=m%n;//保证m在0~n-1
    
            }
           // System.out.println("m最初等于:"+m);
            int n1=n;
            //0~n-1最初数组编号
            //m-1号的人出列
            int []arr = new int[n];
            for(int i=0;i<n;i++){//赋初值
                arr[i]=i;
            }
            for (int i = 0; i <n ; i++) {
                if(IsEnd(arr)){
                    break;
                }
                if(arr[i]==m-1){
                    arr[i]=-1;
                    n1--;
                    int m1=m;
                    m=m%n1;
                  //  System.out.println("m="+m+"  n1="+n1);
                    int cnt=0;
                    while(cnt<n1){
                        if(arr[(i+1)%n]==-1){
                            i++;
                            continue;
                        }
                        arr[(i+1)%n]=cnt;
                        cnt++;
                        i++;
                    }
                    if(m==0){
                        m=m1;
                    }
     //               for (int j = 0; j <n ; j++) {
    //                    System.out.print(arr[j]+" ");
    //                }
                   // System.out.print(m+'
    ');
                    i=-1;
                }
    
    
            }
            if(IsEnd(arr)){
                for (int j = 0; j <arr.length ; j++) {
                    if(arr[j]!=-1){
                        return j;
                    }
                }
            }
    
            return 0;
    
        }
    
        public static void main(String[] args) {
            System.out.println(LastRemaining_Solution(5,3));
        }
    }
    
    
    
    不一样的烟火
  • 相关阅读:
    FineUIPro v5.1.0 发布了!
    FineUI十周年纪念版即将发布(基于像素的响应式布局,独此一家)!
    FineUIPro/Mvc/Core/JS v4.2.0 发布了(老牌ASP.NET控件库,WebForms,ASP.NET MVC,Core,JavaScript)!
    选择IT公司的雇主提问
    项目管理趋势
    突发事件下的项目管理
    12-Factor与微服务
    CQRS(Command and Query Responsibility Segregation)与EventSources实例
    阅读理解力的四个层次
    2018年Code Review状态报告
  • 原文地址:https://www.cnblogs.com/cstdio1/p/12230589.html
Copyright © 2011-2022 走看看