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, 这个方法的返回值就是中奖当王的那只了。

  • 相关阅读:
    软考相关试题
    qt中的toUtf8, toLatin1, Local8bit, toUcs4(转)
    qt的中文乱码问题
    《左耳听风》-ARTS-打卡记录-第八周
    杂题
    图论
    基础数据结构
    整除
    同余
    常用数学
  • 原文地址:https://www.cnblogs.com/yuwen/p/monkeypickking.html
Copyright © 2011-2022 走看看