zoukankan      html  css  js  c++  java
  • 猴子选大王的c#实现

      原文地址:猴子选大王的c#实现作者:余文

      今天被问到了猴子选大王的意思,题目大意就是说有n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。

      这个问题明显改用循环链表来做,方便快捷。不过可惜C#里没有循环链表,只有双向链表。当然可以通过继承双向链表来重写节点的next方法,让最后一个节点指向第一个节点,实现自定义的循环链表。不过那样麻烦些,况且,没有循环链表,就干不了活了吗?用普通list一样做。就当猴子没有围城一圈,从1号猴子开始站成一排,数到最后就接着从队列开头继续数好了。具体实现如下。

    public static int GetKing(int monkeyNum, int loopLength)
    {
        List<int> monkeys = new List<int>();
        for (int i = 1; i <= monkeyNum; i++) monkeys.Add(i);
    
        int position = 0;
        while (true)
        {
            for (int i = 1; i <= loopLength; i++)
            {
                if (i == loopLength)
                {
                    monkeys.Remove(monkeys[position]);
                    position = position == 0 ? position = monkeys.Count - 1 : position - 1;
                }
                position = position == monkeys.Count - 1 ? 0 : position + 1;
            }
    
            if (monkeys.Count == 1) return monkeys[0];
        }
    }

      OK, 这个方法的返回值就是中奖当王的那只了。

  • 相关阅读:
    vuex详解
    es6 数组方法的扩展
    es6class语法和继承
    变量的解构赋值
    es6变量let
    前端模块化
    webpack基础
    react中的redux(入门)
    react-router-dom中的BrowserRouter和HashRouter和link与Navlink
    react-router-dom
  • 原文地址:https://www.cnblogs.com/yuwen/p/monkeypickking.html
Copyright © 2011-2022 走看看