zoukankan      html  css  js  c++  java
  • 循环链表1(猴王问题)

    问题描述

    约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。

    输入数据

    每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m, n < 300)。最后一行是:0 0

    输出要求

    对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号

    输入样例:

    6 2

    12 4

    8 3

    0 0

    输出样例:

    5

    1

    7

    #include"iostream"
    using namespace std;
    int getKing(int n,int m);
    int main(){
        int n;
        int m;
        while(true){
            cin>>n>>m;
            if(n==0&&m==0){
                break;
            }
            cout<<getKing(n,m)<<endl;
        }
        return 0;
    }
    /*
    600000 2
    12 4
    8 3
    0 0
    
    */
    int getKing(int n,int m){
        int *arr = new int[n];
        for(int i = 0;i < n;i++){
            arr[i] = 1;
        }
        int j = 0;
        for(i = 0;i < n - 1;i++){
            int k = 0;
            for(j = j%n;;j++){
                if(arr[j%n]){
                    if(++k==m){
                        break;
                    }
                }
            }
            arr[j%n] = 0;
        }
        for(i = 0;i < n;i++){
            if(arr[i]){
                return i + 1;
            }
        }
        delete[] arr;
        return 0;
    }
  • 相关阅读:
    mysql 存储过程 异常处理机制
    Maven 私服打包
    Flink(2):Flink的Source源
    Flink(1):Flink的基础案例
    最后一课
    我的获奖记录及 Important Dates in OI
    目录
    入坑 OI 三周年之际的一些感想
    洛谷 P3781
    Atcoder Typical DP Contest S
  • 原文地址:https://www.cnblogs.com/oleolema/p/9033073.html
Copyright © 2011-2022 走看看