您的位置:首页 > 其它

约瑟夫问题(Josephus)

2008-06-10 23:49 288 查看
一、问题描述

.......

二、问题分析

.......

三、程序1:基于简单数组

// Josephus.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <iostream>

using namespace std;

int main()

{

int n, m;//n参与活动的人数,m计数值

cin >> n >> m;

cout << n << " " << m << endl;

int* a = new int
;

for(int i=0; i<n; ++i)

a[i] = i+1;//设置编号

int s = n, k = -1, j = -1; //

while(s != 1) //一直传递,直到最后一个人为止

{

while(k != m)

{//寻找下一个出局者

do{

j = ++j % n;

}while(a[j] == 0);//找到下一个参与者

++k;

}

cout << a[j] << endl;

a[j] = 0;//出局者的编号清为0

k = -1;

s -= 1;

}

cout << "Winner: ";

do{

j = ++j % n;

}while(a[j] == 0); //最后一个为获胜者

cout << a[j] << endl;

delete[] a;

return 0;

}

四、程序2:基于循环链表

........
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: