约瑟夫问题(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:基于循环链表

........

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值