用C++实现约瑟夫环的问题
约瑟夫问题是个有名的问题:N个人围成一圈。从第一个開始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。
比如N=6,M=5。被杀掉的人的序号为5,4,6。2。3。最后剩下1号。
假定在圈子里前K个为好人,后K个为坏人。你的任务是确定这种最少M,使得全部的坏人在第一个好人之前被杀掉。
//----数学中有乘法口诀。
。那仅仅是工具。我们都非常熟悉。
//----C++中有一些主要的程序。也仅仅是工具。我们必须像熟悉乘法口诀一样去熟悉这些程序。
//----非常基础的一些东西,必须熟练。。。
#include<iostream>
class link;
using namespace std;
class node{
friend class link;
public:
node():next(NULL){}
node(int value):data(value),next(NULL){}
private:
int data;
node *next;
};
class link{
public:
link(int x,int y,int z):n(x),s(y),m(z){}
node *createlink()
{
node *p,*r;
node *q;
r=p=new node;
for(int i=1;i<=n;++i)
{
q=new node;
q->data=i;
r->next=q;
r=q;
}
r->next=p->next;
return p;
}
node *jusefu(node *startnode)
{
node *p=startnode->next;
node *q;
for(int i=1;i<s;++i) p=p->next;//让p指向開始数数的位置,让q指向须要删除结点的位置的前一个位置
q=p->next; while(q->next!=p)
{
q=q->next;
}
while(p->next!=p)
{
for(int j=1;j<m;++j)
{
//node *tmp;
q=p;
p=p->next; }
q->next=p->next;
cout<<"将要删除的号码是"<<p->data<<endl;
delete p;
p=q->next; }
cout<<"留下来的人数的号码为"<<p->data<<endl;
return p; }
private:
int n;
int s;
int m; };
int main()
{ int i,j,k;
cout<<"输入总数,開始位置。每次循环人数"<<endl;
cin>>i>>j>>k;
link linklist(i,j,k);
node *head=linklist.createlink();
node *lastnode=linklist.jusefu(head); system("pause");
return 0;
}
用C++实现约瑟夫环的问题的更多相关文章
- C#实现约瑟夫环问题
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace orde ...
- C语言数组实现约瑟夫环问题,以及对其进行时间复杂度分析
尝试表达 本人试着去表达约瑟夫环问题:一群人围成一个圈,作这样的一个游戏,选定一个人作起点以及数数的方向,这个人先数1,到下一个人数2,直到数到游戏规则约定那个数的人,比如是3,数到3的那个人就离开这 ...
- C语言链表实现约瑟夫环问题
需求表达:略 分析: 实现: #include<stdio.h> #include<stdlib.h> typedef struct node { int payload ; ...
- javascript中使用循环链表实现约瑟夫环问题
1.问题 传说在公元1 世纪的犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40 个同胞被罗马士兵包围.犹太士兵决定宁可自杀也不做俘虏,于是商量出了一个自杀方案.他们围成一个圈,从一个人开始,数到第 ...
- tc 147 2 PeopleCircle(再见约瑟夫环)
SRM 147 2 600PeopleCircle Problem Statement There are numMales males and numFemales females arranged ...
- HDU 3089 (快速约瑟夫环)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3089 题目大意:一共n人.从1号开始,每k个人T掉.问最后的人.n超大. 解题思路: 除去超大的n之 ...
- 约瑟夫环(Josehpuse)的模拟
约瑟夫环问题: 0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字. 这里给出以下几种解法, 1.用队列模拟 每次将前m-1个元 ...
- C++ 约瑟夫环问题
约瑟夫环比较经典了 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直 ...
- 约瑟夫环的java解决
总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需 ...
- 14.约瑟夫环问题[JosephusProblem]
[题目] n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后,从被删除数字的下一个继续删除 ...
随机推荐
- web前端常用的封装方法
1.放大镜 //页面加载完毕后执行 window.onload = function () { var oDemo = document.getElementById('demo'); var oMa ...
- kafka异常问题汇总
1.报错:: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.NotLeaderForPartition ...
- Python中单元测试出错了,会怎么样?
在上一篇中,我们看到了单元测试正常通过时的情况,如果我们边修改一下要测试的函数,然后再运行单元测试,会出现什么情况. 原say_hello_name.py def hello_name(name): ...
- LightOJ 1422 区间DP Halloween Costumes
d(i, j)表示第i天到第j天至少要穿多少件衣服. 先不考虑第i天和后面 i+1 ~ j 天的联系,那就是至少要穿 1 + d(i+1, j)件衣服. 再看状态转移,如果后面第k(i+1 ≤ k ≤ ...
- angular controller与directive相互引用
/** * Created by Administrator on 2017/8/28. */ var app =angular.module('app',[]); app.directive('fo ...
- BNUOJ 6727 Bone Collector
Bone Collector Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Origin ...
- 九度oj 题目1135:字符串排序
题目描述: 先输入你要输入的字符串的个数.然后换行输入该组字符串.每个字符串以回车结束,每个字符串少于一百个字符. 如果在输入过程中输入的一个字符串为“stop”,也结束输入. 然后将这输入的该组字符 ...
- BZOJ 1027 [JSOI2007]合金 ——计算几何
我们可以把每一种金属拆成一个二维向量,显然第三维可以计算出来,是无关的. 我们只需要考虑前两维的情况,显然可以构成点集所形成的凸包内. 然后我们枚举两两的情况,然后可以发现如果所有的点都在一侧是可以选 ...
- 算法复习——迭代加深搜索(骑士精神bzoj1085)
题目: Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相 ...
- 洛谷 [P2964] 硬币的游戏
博弈论+dp 依旧是博弈论的壳子,但问的是最大值,所以要dp 设 dp[i][j] 表示该取 i 号硬币,上一次取了 j 个的先手能取的最大值, 因为每次从小到大枚举复杂度太高,所以我们要从 dp[i ...