用数组求解Josephus问题
来源:互联网 发布:big5输入法mac 编辑:程序博客网 时间:2024/05/09 05:18
这是我学习数据结构做的第一小程序,哈哈,比较简单,但是我也想给大家一起分享。呵呵
2.5 试编写一个求解Josephus问题的函数。用整数序列1,2,3,...,n表示顺序围坐在圆桌周围的人,并采用数组表示作为求解过程中使用的数据结构。然后使用n=9,s=1,m=5,以及n=9,s=1,m=0,或者n=9,s=1,m=10作为输入数据,检查你的程序的正确性和健壮性。
解答 #include "stdafx.h"
#include<stdlib.h>
#using <mscorlib.dll>
#include <iostream>
using namespace std;
void Josephus(int a[],int n,int s,int m);
int _tmain()
{ int i, n,m,s;
cout<<"假设有n个人坐在圆桌的周围:"<<endl;
cout<<"从第s个人开始数起,到第m个人的时候,出局"<<endl;
cout<<"请输入n,s,m的值:"<<"";
cin>>n>>s>>m;
cout<<endl;
int *a; //定义一个动态数组
a=new int[n];
if(a[n] ==NULL)
{
cerr<<"内存分配错误!"<<endl;
}
if(m==0){
cerr<<"m=0是无效的参数!"<<endl;
cout<<"再次输入m的值:"<<endl;
cin>>m;
}
Josephus(a,n,s,m);
cout<<endl;
cout<<"n个人出局的顺序:"<<endl;
for(i=0;i<n;i++) cout<<a[i]<<'/t';
cout<<endl;
delete[] a;
return 0;
}
void Josephus(int a[],int n,int s,int m)//n个人围坐在一个圆桌周围,从第s个人开始报数,数到第m个人,让他出局
{
int i,j,k,tmp;
for(i=0;i<n;i++) a[i]=i+1; //初始化,执行n次
i=s-1; //报名起始位置
for(k=n;k>=1;k--){ //逐个出局,执行n-1次
if(i==k) i=0;
i=(i+m-1)%k; //寻找出局的位置
if(i!=k-1){
tmp=a[i]; //出局者交换到第k-1位置
for(j=i;j<k-1;j++) a[j]=a[j+1];
a[k-1]=tmp;
}
}
for(k=0;k<n/2;k++){ //全部逆置,得到出局序列
tmp=a[k];
a[k]=a[n-k-1];
a[n-k-1]=tmp;
}
}
- 用数组求解Josephus问题
- Josephus问题求解
- 求解JOSEPHUS问题
- Josephus问题求解
- Josephus问题求解 2
- Josephus问题求解
- [Java]使用队列求解josephus问题
- Josephus环问题求解(Java实现)
- josephus 问题的数组解法
- java数组解决约瑟夫(Josephus)问题
- Josephus问题(基于数组的实现)
- 约瑟夫问题 The Josephus Problem 非递归算法求解
- Josephus环问题——顺序表求解
- 队列用例:Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- 简单反汇编之if判断
- 流行的无图CSS圆角
- ssl 证书
- 如果人的视觉范围变成全视野(360度);那会怎样?
- RPM 的介绍和应用
- 用数组求解Josephus问题
- spring security
- 获得GridView内的RowIndex,取得DataKeys 的值
- jsp页面压缩 gzip
- C语言中将密码显示成星号
- 基于朴素贝叶斯分类器的文本分类算法(上)
- Hibernate 各种数据库的配置
- java 属性文件增删改查
- Heritrix安装及启动