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;
    }
  • 相关阅读:
    Power of Cryptography
    Radar Installation
    Emag eht htiw Em Pleh
    Help Me with the Game
    89. Gray Code
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    82. Remove Duplicates from Sorted List II
  • 原文地址:https://www.cnblogs.com/oleolema/p/9033073.html
Copyright © 2011-2022 走看看