小言_互联网的博客

华师2013年C++复试编程题(约瑟夫环问题)

257人阅读  评论(0)

题目

分析

这题没什么好分析的了,看完题目,直接上代码吧!

代码

#include <iostream>

using namespace std;

void Josephus(int n){
    int *p = new int[n];
    for (int i = 0; i < n; i ++){
        p[i] = i + 1;
    }

    int remainder = n;//剩余未出局人数
    int k = 0;//循环遍历数组
    int count  = 0;//报数器:1 2 3 , 1 2 3, 1 2 3,...
    while (remainder > 1){
    	//剩余未出局人数大于1时,游戏继续
        if (p[k] != -1){
            //p[k] == -1表示已经出局
            count ++;
            if (count % 3 == 0){
                p[k] = -1;//出局
                remainder --;//剩余人数减1
            }
        }
        k = (k + 1) % n;
    }

    for (int i = 0; i < n; i ++){
        if(p[i] != -1){
            cout <<"胜出者:" << p[i] << "号" << endl;
        }
    }
}


转载:https://blog.csdn.net/weixin_36979214/article/details/104525524
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场