`
nathan09
  • 浏览: 145546 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

约瑟夫问题(Josephus)

 
阅读更多

一、问题描述

.......

二、问题分析

.......

三、程序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[n];

 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:基于循环链表

........

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics