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

    7-28 猴子选大王(20 分)

    一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

    输入格式:

    输入在一行中给一个正整数N(≤1000)。

    输出格式:

    在一行中输出当选猴王的编号。

    输入样例:

    11
    

    输出样例:

    思路:用类将猴子在不在圈内的标记和姓名联系起来,然后进行循环,将报数为3的猴子淘汰,思路清晰了,代码都不是事

     1 #include<stdio.h>
     2 #include<string>
     3 #include<sstream>
     4 #include<iostream>
     5 using namespace std;
     6 class monkey{        //每只猴子赋有名字和在不在圈中的属性
     7     public: int name;
     8     public :int flag;
     9 };
    10 int main()
    11 {
    12     int n; cin >> n;
    13     monkey *monk = new monkey[1005];
    14 
    15     for (int i = 1; i <= n; i++)            //给属性赋值
    16     {
    17         monk[i].name = i;
    18         monk[i].flag = 1;
    19     }
    20 
    21     int rest = n, pos = 1, run = 1;            //rest代表生剩下猴子的数量,pos代表目前指向哪只猴子,run代表这个猴子应该报的数
    22     while (rest != 1){
    23         if (monk[pos].flag == 1 && run % 3 == 0)            //第三只猴子淘汰
    24         {
    25             monk[pos].flag = 0;                    //赋值为零时代表淘汰
    26             rest--; run = 1;
    27         }
    28 
    29         if (monk[pos].flag == 1)
    30         {
    31             run++;                                
    32         }
    33 
    34         pos = (pos + 1) % n;
    35         if (pos == 0)pos = n;            //循环指向圈中的猴子的名字
    36 
    37     }
    38     for (int i = 1; i <= n; i++)
    39     {
    40         if (monk[i].flag==1)
    41         cout << monk[i].name << endl;
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    Comparison of MPTCP & CMT-SCTP
    Wireshark
    MPTCP协议相关分析
    抑郁
    MPTCP 源码分析(七) 拥塞控制
    MPTCP 源码分析(六) 数据重发
    MPTCP 源码分析(五) 接收端窗口值
    MPTCP 源码分析(四) 发送和接收数据
    MPTCP 源码分析(三) 子路径选择
    MPTCP 源码分析(二) 建立子路径
  • 原文地址:https://www.cnblogs.com/zengguoqiang/p/8329164.html
Copyright © 2011-2022 走看看