Josephus(约瑟夫)问题
来源:互联网 发布:javascript bind() 编辑:程序博客网 时间:2024/06/01 09:08
问题描述:
已知N个人(以编号1,2,3...N分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到M的那个人出列;他的下一个人又从1开始报数,数到M的那个人又出列;依此规律重复下去,直到剩下最后一个人。程序的意图是求出最后留下的人的编号。
/*******C++实现************/
#include<iostream>
#include<cstdlib>
#include<stdexcept>
using namespace std;
template<class T> //C++模板
struct node
{
T item;
node* next;
node(T x,node* t):item(x),next(t) {}
};
int main(int argc,char **argv)
{
if(argc<3)
throw runtime_error("invalid commandline/n");
typedef node<int> Int_Node;//类模板使用时必须显式的实例化,这点与函数模板不同。
int N=atoi(argv[1]);//atoi用于字符串转换为整形
int M=atoi(argv[2]);
Int_Node* x=new Int_Node(1,0);
x->next=x;
Int_Node *t=x;
int i=2;
for(;i<=N;i++)
x=(x->next=new Int_Node(i,t));
//循环链表建立完成时x指向最后一个结点,即编号为N的结点!
while(x!=x->next)
{
for(i=1;i<M;i++) x=x->next;
t=x->next;
x->next=t->next;
delete t;
}
cout<<x->item<<endl;
return 0;
}
/**************C语言实现****************/
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int Item;
typedef struct node* link;
struct node
{
Item item;
link next;
};
//这里将malloc函数进行包裹,主调函数(本例子就是main函数)省去重复判断调用malloc是否成功!
void* Malloc(size_t len)
{
void* p=malloc(len);
if(p==NULL)
{
printf("malloc failed/n");
exit(-1);
}
return p;
}
int main(int argc,char **argv)
{
if(argc<3)
{
printf("commandline is invalid/n");
return -1;
}
int N=atoi(argv[1]),M=atoi(argv[2]);
link x=(link)Malloc(sizeof *x);
link t=x;
x->item=1;
x->next=x;
int i=2;
for(;i<=N;i++)
{
x=(x->next=Malloc(sizeof *x));
x->item=i;
}
x->next=t;
while(x!=x->next)
{
for(i=1;i<M;++i) x=x->next;
t=x->next;
x->next=t->next;
free(t);
}
printf("the last is %d/n",x->item);
}
输出:
./a.out 9 5
8
- Josephus约瑟夫环问题
- 约瑟夫环问题(Josephus)
- 约瑟夫环问题 Josephus
- 约瑟夫问题(Josephus)
- 约瑟夫问题(Josephus problem)
- Josephus(约瑟夫)问题
- Josephus约瑟夫环问题
- 约瑟夫环问题(Josephus)
- Josephus problem(约瑟夫问题)
- Josephus 约瑟夫问题
- Josephus(约瑟夫环)问题
- 约瑟夫环问题(Josephus)
- 约瑟夫环问题(Josephus)
- 约瑟夫(Josephus)问题
- 约瑟夫问题Josephus problem
- 约瑟夫(Josephus)问题
- 约瑟夫(Josephus)问题
- 约瑟夫(Josephus)问题
- IGMPv2新增功能
- 网易邮箱与GMAIL
- 关于C#学习的问题
- 如何安装软件包(Package)及 rpm 软件包管理器
- 根据容器和控件名查找控件
- Josephus(约瑟夫)问题
- 设计模式-状态模式(State Pattern)
- asp.net中Repeater控件里Radiobutton如何实现单选
- VS2005编译DLL错误,error C2491: 'CMyClass::Function' : definition of dllimport function not allowed
- rePaint:无效区域的利用
- ubuntu下嵌入式开发环境的搭建
- error LNK2001:unresolved external symbol AND error LNK2005:_DllMain@12 already defined
- AMR音频编码器概述及文件格式分析
- 虚析构函数