有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)
1. 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)
这是一道数据结构对与循环队列的应用,首先要了解什么是队列,队列和栈的区别。队列的进出方法。队列是要求从尾进头出,当然这是一种俗的说法,各自有各自的方法,任务是要做出题来,也有很多好的方法可用!!
我用的方法是链队,对于链队来说比起顺序队不用担心数组的溢出,当然对于这一题来说删除数据更方便!首先先将每个人编号,然后将队列首尾相接,就像一个环形一样的链,然后用循环来将数到3的人的编号输出,剩余最后一个在输出就行啦。在写的过程中也会碰到很多的问题,代码如下:
yuesehan.cpp:
#include <iostream>
#include <stdio.h>
#include "han.h"
#include "Status.h"
using namespace std;
int main()
{
LinkQueue Q;
InitQueue(Q);
int i,n;
ElemType e = 0;
cout<<"输入共有多少人参加"<<endl;
cin>>n;
for(i = 1;i<=n;i++)
{
EnQueue(Q,i);
}
Main(Q,n,e);
return 0;
}
han.h:
#include <iostream>
#include <stdlib.h>
#include "Status.h"
using namespace std;
typedef struct QNode
{
ElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q)
{
Q.front = Q.rear=new QNode;
if(!Q.front)
{
exit(OVERFLOW);
}
Q.front->next = NULL;
return OK;
}
Status EnQueue(LinkQueue &Q,ElemType e)
{
QueuePtr p;
p = new QNode;
if(!p)
exit(OVERFLOW);
p -> data = e;
p -> next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
Status DeQueue(LinkQueue &Q,ElemType &e)
{
QueuePtr p;
p = new QNode;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(Q.rear == p)
{
Q.rear = Q.front;
}
delete p;
return OK;
}
void Main(LinkQueue &Q,int n,int e)
{
Q.front = Q.front->next;
Q.rear->next = Q.front;
int j;
bool flag = false;
cout<<"淘汰编号的序列"<<endl;
while(n != 1)
{
j = 1;
if(flag == false)
{
for(j = 1;j<2;j++)
{
Q.front = Q.front->next;
flag = true;
}
}
else
{
for(j = 1;j<3;j++)
{
Q.front = Q.front->next;
}
}
DeQueue(Q,e);
cout<<e<<" ";
n--;
}
cout<<endl;
cout<<"最后剩下的一人是原来的第"<<Q.front->data<<"号"<<endl;
}
Status.h:
#define TRUE 1
#define FALSE 0l
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXSIZE 100
typedef int ElemType;
typedef int Status;
输出结果:
输入共有多少人参加
10
淘汰编号的序列
3 6 9 2 7 1 8 5 10
最后剩下的一人是原来的第4号
有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)相关推荐
- C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题
1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈:下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序. 考虑问题: 报到T的人出圈,怎么表示出 ...
- c语言报数问题程序,转圈报数问题(C语言):有n个人围成一圈,顺序排号……...
问题描述: 有n个人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位. 题目分析: 这道题目是我们在日常生活中也能经常见到的一种报数小游戏.首 ...
- 围圈报数c语言编程,C语言编程:有n个人围成一圈,顺序排号。从第一个人开始报数......
题目:有N个人,从1到N编号,按照编号顺序围成一圈.从第一个人开始报数(从1报到3),凡报到3的人退出圈子. 问:最后留下的人的编号是几号. ============================= ...
- 13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。
[绕圈报数] 1130 更新 ======== 一般化情况 13个人围成一圈,从第1个人开始顺序报号1.2.3,凡报到3的人退出圈子.找出最后留在圈子里的人原来的序号. 输出提示 "出圈成员 ...
- 转圈报数问题(C语言):有n个人围成一圈,顺序排号……
问题描述: 有n个人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位. 题目分析: 这道题目是我们在日常生活中也能经常见到的一种报数小游戏.首 ...
- ACMNO.38 C语言-报数 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
题目描述 有n人围成一圈,顺序排号. 从第1个人开始报数(从1到3报数),凡报到3的人退出圈子.`在这里插入代码片` 问最后留下的是原来的第几号的那位. 输入 初始人数n 输出 最后一人的初始编号 样 ...
- python n个人围成一圈,Python练习代码实例69-有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的...
Python 练习实例69 题目:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位. 程序分析:无. 程序源代码:#!/usr/bi ...
- (C语言)有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
题目描述 有n人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位. 输入 初始人数n 输出 最后一人的初始编号 样例输入 3 样例输出 2 ...
- 有N个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
万能方法. #include<stdio.h>//输入输出头文件 #include<stdlib.h>//建立动态内存分配所需要的头文件,malloc()函数需要用到int m ...
最新文章
- Java的字符串常量池
- Android-源码解析HandlerLooper
- 埋点是什么意思_掌握数据生命周期:初识数据埋点
- 字符串数组的排序c++_Java——数组相关知识点及练习演绎
- 重装操作系统时遇到的一些问题的解决方法总结
- 在Spring IoC中,依赖注入和依赖查找的数据来源区别
- github上写简历
- Mac UserWarning: findfont: Font family ['SimHei'] not found
- MATLAB-基本简介
- 渝粤题库 陕西师范大学 《教育科学研究方法》作业
- AndroidX适配教程
- websocket错误码盘点
- Python:使用cv2模块快速生成素描
- 【Leetcode】469. Convex Polygon
- iPad air2 充不进去电
- python怎么加字幕_python3实战之字幕vtt与字母srt的相互转换
- 元宇宙产业委共治大会专题——樊晓娟律师:元宇宙中的隐私保护迫在眉睫
- Graphql Instrumentation
- loadrunner 录制脚本出现乱码解决方法
- linux系统的层次结构,Linux 文件系统层次结构
热门文章
- b站网页版没有html播放,网页b站能小窗口播放吗?怎么播放?最新版本bilibili小窗口播放器...
- Django模型中的关系:一对一、一对多与多对多
- RK3399 Android7.1在uboot中设置GPIO的电平无效
- windows下,对opencv进行gcc/g++编译
- 深入浅出极大似然估计
- 树结构(Java实现)
- 使用arduino mega2560制作一台超简易的假机械臂!
- 【自建题库】c认证初级
- 黑马程序员---网络编程
- 看过无数总结,经历无数实践,这才是顶级IT公司的架构设计