循环队列解决约瑟夫问题
有n个人围成一圈,从第1个人开始,1,2,…,m报数,报至m出局,余下的人继续从1,2,…,m报数,重复之前的流程,要求:求出被淘汰编号的序列,及最后剩下的一人是
原来的第几号?(要求:用循环队列解决该问题。)
#ifndef STATUS_H #define STATUS_H#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status;#endif
#include <iostream> using namespace std; #include "Status.h" typedef int ElemType; typedef struct { ElemType *base; int front; int rear; int MAXSIZE; }SqQueue; Status InitQueue(SqQueue& Q,int n) //初始化队列 { Q.base = new ElemType[100]; if(!Q.base) { cout << "创建队列失败!"; return ERROR; } Q.front=Q.rear=0; Q.MAXSIZE = n+1;//MAXSIZE是总人数+1,是为了留出一个空位置来放置rear return OK; } void QueueTraverse(SqQueue Q) //遍历队列 { int i; i=Q.front; while(i!=Q.rear) { cout<<Q.base[i]<<" "; i=(i+1)%Q.MAXSIZE; } cout<<endl; } Status EnQueue(SqQueue& Q,ElemType e) //入队 { if((Q.rear+1)%Q.MAXSIZE==Q.front) { cout << "队列已满!"; return ERROR; } Q.base[Q.rear] = e; Q.rear = (Q.rear+1)%Q.MAXSIZE; return OK; } Status DeQueue(SqQueue& Q,ElemType& e) //出队 { if(Q.front==Q.rear) { cout << "队列为空!"; return ERROR; } e = Q.base[Q.front]; Q.base[Q.front] = 0; Q.front = (Q.front+1)%(Q.MAXSIZE-1);//总人数为MAXSIZE-1return OK; }int main() { int n,m,i=1; SqQueue Q; ElemType e; cout << "请输入n个人(n<=100):";do{ cin >> n; if(n>100 || n<1) { cout << "输入人数错误!请重新输入:"; } }while(n>100 || n<1);InitQueue(Q,n); while(i<=n)//入队操作 { EnQueue(Q,i); i++; } cout << "\n此时的序列顺序为:"<<endl; QueueTraverse(Q); cout << "\n请输入第m个人出队(1<=m<=n):"; do{ cin >> m; if(m>n || m<1) { cout << "m输入错误!请重新输入:"; }}while(m>n || m<1);cout << endl; int Count = n;//用来记录剩下的人数 while(Count != 1) { i = 1;//i用来控制是第几个人报数 while(i != m)//当i的值不等于m的值时 { Q.front = (Q.front+1)%(Q.MAXSIZE-1);//总人数为MAXSIZE-1 if(Q.base[Q.front] != 0)//当此时不为0的话,i++用来控制第几个人 { i++; } } DeQueue(Q,e); while(Q.base[Q.front] == 0)//当此时为0的时候,循环找到下一个不为0的位置 { Q.front = (Q.front+1)%(Q.MAXSIZE-1); } cout << "序号:" << e << "出局!\n"; Count--; } DeQueue(Q,e); cout << "\n最后一个是:" << e << endl; return 0; }
1. 有n个人围成一圈,从第1个人开始,1,2,…,m报数,报至m出局,余下的人继续从1,2,…,m报数,重复之前的流程,要求:求出被淘汰编号的序列,及最后剩下的一人是原来的第几号?(要求:用循环队列解决该问题。)
转载于:https://www.cnblogs.com/luoyanghao/p/6197664.html
循环队列解决约瑟夫问题相关推荐
- 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)
1. 有n个人围成一圈,从第1个人开始,1.2.3报数,报至3出局,余下的人继续从1.2.3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列.(要求:用循环队列解决该问题.) 这是一道 ...
- 使用队列解决约瑟夫环问题
题目描述: 首先,让小朋友们围成一个大圈.然后,随机指定一个数m,让编号为0的小朋友开始报数.每次喊到m-1的那个小朋友要出列唱首歌,并且不再回到圈中,从他的下一个小朋友开始,继续0-m-1报数-这样 ...
- c语言 队列 游戏,循环队列实现约瑟夫游戏(C语言版)
#include #include typedef struct node { int *base; int front; int rear; }Node; /* 思路: *使用一个顺序循环队列来存放 ...
- 用java解决约瑟夫循环问题,Java实现循环列表解决约瑟夫环问题
约瑟夫环:共有n个人围成一圈,从1开始报数,数到m的人出圈,求最后幸运者序号?? 下面用Java实现循环列表解决这个问题: package com.iteye.ljmdbc7a; import jav ...
- 循环队列解决舞会问题(C++实现)
[题目描述] 假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队.跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴.规定每个舞曲能有一对跳舞者.若两队初始人数不相同,则较长的那一队中未配对者 ...
- 基于数组实现循环队列(基于Java实现)
title: 基于数组实现循环队列(基于Java实现) tags: 数组 循环队列 基于数组实现循环队列的方法原理: 我们在用数组实现队列的时候,发现当tail = n时,就会有数据搬移的操作,这样一 ...
- 环形队列的输出_循环队列的基本操作详细讲解
实验学时: 2 实验类型: (设计型) 一.实验目的 1. 理解并掌握队列的逻辑结构和顺序存储结构,了解循环队列的特点: 2. 掌握循环队列中基本操作的相关算法: 3. 编程实现相关算法: 4. 学会 ...
- 循环队列(队列头尾相接的顺序存储结构)
循环队列(头尾相接的循环) 1.引出循环队列 解决上一篇博客当中:队列顺序存储结构出现的问题 现在通过将 rear 指针重新指向下标为 0 的位置,来解决上述问题 rear+1之后跑到了数组末尾后一位 ...
- 【Java 数据结构 算法】宁可累死自己, 也要卷死别人 6 循环队列
[Java 数据结构 & 算法]⚠️宁可累死自己, 也要卷死别人 6⚠️ 循环队列 概述 循环队列 循环队列实现 改变队列大小 enqueue 方法 dequeue 方法 main 完整代码 ...
最新文章
- matlab求adc信号的信噪比,关于ADC的信噪比 - pengyouxiaohui的日志 - EETOP 创芯网论坛 (原名:电子顶级开发网) -...
- php数据结构链表代码,数据结构之线性表——链式存储结构之单链表(php代码实现)...
- STM32开发 -- 系统架构
- 南昌大学c语言大作业,南昌大学计算机C语言答案2
- MATLAB中如何生成指定范围的随机整数向量
- TkMybatis 笔记
- Awesome Go
- JavaWeb那些事儿(一)--为什么做java的web开发使用struts2,springMVC和spring这样的框架
- 面向对象程序设计课第四次作业
- 电信基础设施共建共享
- 51单片机中断程序大全
- 软件程序开发步骤有哪些?如何简单制作手机App?
- easyui filebox文件类型判断
- 框架尺寸调整属性NORESIZE
- 降维打击 Dimensionality reduction attack
- Opencv中的颜色检测
- 两个各四只青蛙过河java_Java实现 LeetCode 403 青蛙过河
- 微信小程序 实现报表(表格)双指缩放功能
- 两台电脑之间怎么互相传文件
- 厦大2021届大一小学期C语言作业1 数组+字符串+指针+位操作
热门文章
- linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家
- java链表实现_数据结构——基于java的链表实现(真正理解链表这种数据结构)...
- 【spring-boot】restfull api 返回值中,去掉 null 值
- 【CKEditor】上传图片接口接收不到CKEditorFuncNum参数
- 微型计算机接口期末,最新大学微机原理与接口技术期末试题及答案
- 猴子选王c语言链表程序代码,C语言程序设计-猴子选大王[链表应用]
- 计算机系统操作工培训视频,计算机系统操作工培训第三篇.ppt
- mysql 5.1.73.tgz下载_Linux下安装python,mysql
- python爬取素材图片代码_基于Python爬取素材网站音频文件
- python public_【速记速学】Python类的定义,属性,方法,访问性