zoukankan      html  css  js  c++  java
  • 猴子选大王


    今天碰到一道题目,以前也做过 但是今天碰到时竟然搞混淆的,真是该死
    题目如下:
      一群猴子都有编号,编号分别是1,2,3 ...n ,这群猴子(n个)按照1到n的顺序顺时针围坐一圈,从编号为1的猴子开始顺时针报数,每数到m(m<n),则该猴子就要离开此圈,再从下一个猴子开始数,每数到m, 则该猴子离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
    下面就是我做的答案:如有问题欢迎提出。。。
    方法一:
          /// <summary> /// 从猴子中选出一只大王 /// </summary> /// <param name="m">猴子的总数量</param> /// <param name="n">游戏报数</param> /// <returns></returns> private static int SelectKing(int m, int n) { //调用Enumerable.Range()方法生成范围数并存到List<int>型变量中 List<int> listMokeny = new List<int>(Enumerable.Range(1, m)); //猴子所在的下标 int index = 0; //报数 int CurrentNumb = 0; while (listMokeny.Count != 1) { //如果猴子所在的下标大于猴子的数目-1 则重置为第一个(即下标0) if (index > listMokeny.Count-1) { index = 0; } //报数 CurrentNumb++; //如果当前报到的数等于游戏规定的数则相应的猴子退出 //注意:移除后下标就不能++了 if (CurrentNumb == n) { CurrentNumb =0; listMokeny.RemoveAt(index); continue; } index++; } return listMokeny[0]; }

     方法二:

    ///
    ///总人数M,数到N个排除
    ///
    public int King(int M,int N)
    {
    int k=0;//定义一个遍历,用来存储号码
    for(int i=2;i<=M;i++)//遍历猴子个数
    {
    k=(k+N)%i;//计算号码值
    }
    return ++k;//返回猴子号码
    }
    
  • 相关阅读:
    Configure文件学习
    实用文章:常用开源协议详细解析
    openwrt的sysupgrade和factory固件的区别
    Linux块设备和字符设备
    eclipse代码补全按键修改成Tab
    Hadoop环境搭载
    比特币中难度调整
    共识机制
    比特币交易本质--UTXO(Unspent Transaction Output)
    多重签名
  • 原文地址:https://www.cnblogs.com/xiexingen/p/3034290.html
Copyright © 2011-2022 走看看