实验题目:约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。从第一个人开始顺时针方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下一个人
实验题目:约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。从第一个人开始顺时针方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下一个人开始重新从1报数,报到m时停止并且报m的人出列。如此下去,直到所有人全部出列为止。要求设计一个程序模拟此过程,对任意给定的m和n,求出出列编号序列。
#include<iostream>
#define MAXSIZE 50
using namespace std;
typedef int Elemtype;
// 定义顺序表结构体
typedef struct
{Elemtype data[MAXSIZE];int length;
}Sqlist;
//另一种结构体类型名方式*Sqlist
//typedef struct
//{
// Elemtype data[MAXSIZE];
// int length;
//}*Sqlist;//创建顺序表思想:直接把有几个人复制到顺序表中,没有书上那种的原因是书上是用的数组
void CreateList(Sqlist *& s)//另一种结构体时void CreatList(Sqlist s)
{int n;cout << "输入共有几个人" << endl;cin >> n;cout << " 最开始的编号为:" << endl;for (int i = 0; i < n; i++){s->data[i] = i + 1;cout << s->data[i] << " ";s->length = n;}cout << endl;
}
//初始化线性表
void InitList(Sqlist *& L)//另一种结构体时void InitList(Sqlist L)
{L = (Sqlist*)malloc(sizeof(Sqlist));L->length = 0;
}
// 实现约瑟夫环的算法:1.(t+m-1)%s->length, 这个s->length表示的是每次出列后参数顺序表的长度都会变化,通过%来实现环的意思跟环队形有点类似
//2.每次出列一个后,所有后面的数据向前一位顶替原来出列的数,形成一个新的表
//3.一共循环s->length次
void Joseph(Sqlist * s,int m)
{int t=0;int i,j;cout << "出列序列" <<endl;for (i = s->length; i >= 1; i--){t = (t + m - 1) % i;//关键cout << s->data[t] << " ";for ( j = t + 1; j <= i - 1; j++)//关键{s->data[j - 1] = s->data[j];}}cout << endl;
}
//实现约瑟夫环的算法:1.(t+m-1)%s->length, 这个s->length表示的是每次出列后参数顺序表的长度都会变化,通过%来实现环的意思跟环队形有点类似
//2.每次出列一个后,所有后面的数据向前一位顶替原来出列的数,形成一个新的表
//3.一共循环s->length次
//void Joseph(Sqlist* s, int m)//另一种结构体时(Sqlist L)
//{
// int t = 0;
// cout << "出列序列" << endl;
// for (s->length; s->length>= 1; s->length--)
// {
// t = (t + m - 1) % s->length;//关键
// cout << s->data[t] << " ";
//
// for (int j = t + 1; j <= s->length - 1; j++)//关键
// {
// s->data[j - 1] = s->data[j];
// }
// }
// cout << endl;
//}
int main()
{Sqlist *L;//另一种结构体时Sqlist L;int m;InitList(L);CreateList(L);cout << "想要报的m数:" << endl;cin >> m;Joseph(L, m);return 0;
}
实验题目:约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。从第一个人开始顺时针方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下一个人相关推荐
- 3、约瑟夫问题的一种描述是:编号为1,2,……,n的n个人按顺时针方向坐一圈,每人持有一个密码(正整数)。一开始任选一个作为报数上限值m,从第一个开始顺时针自1开始顺序报数,报到m是停止报数。报m的人
题目: /* 3.约瑟夫问题的一种描述是: 编号为1,2,--,n的n个人按顺时针方向坐一圈,每人持有一个密码(正整数).一开始任选一个作为报数上限值m, 从第一个开始顺时针自1开始顺序报数 ...
- 题目98-4:n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
题目转载:http://python.wzms.com/s/1/103 题目描述: n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再 ...
- n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数, 数到m的人再出圈,……依次类推, 直到所有的人都出圈,请输出依次出圈人的编号.
88,n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数, 数到m的人再出圈,--依次类推, 直到所有的人都出圈,请输出依次出圈人的编号. 输入 n m 输出 出圈的编号 ...
- 约瑟夫环!编 号是1,2,??,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向 自1开始顺序报数,报到m时停止报数。
流程: ⑴建立模型,确定存储结构: ⑵ 对任意 n个人,密码为 m,实现约瑟夫环问题: ⑶出圈的顺序可以依次输出,也可以用一个数组存储. 示意图: 设计: 首先,设计实现约瑟夫环问题的存储结构.由于约 ...
- 关于当一个C#工程移植到另一台机子上(win7)上时,程序报错。dll没有被指定在Windows上运行,或者它包含错误。请尝试使用原始安装媒体重新安装程序。。。。。。...
, 解决方法:通过从网上重新下载dll文件 拷贝到报错的目录下,替换掉原有的dll,可以正确运行. 转载于:https://www.cnblogs.com/zhayunjia/p/3748811.ht ...
- 编程用莱布尼茨级数公式计算π值,输入一个小数作为阈值,当最后一项的绝对值小于给定阈值时停止计算并输出得到的π值。...
可以使用莱布尼茨级数公式计算 $\pi$ 的代码如下: import mathdef calculate_pi(threshold):"""Calculate pi us ...
- 循环链表,约瑟夫环问题
约瑟夫(Josephus)环问题:编号为1,2,3,-,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数, ...
- 约瑟夫环c语言代码顺序存储,顺序表实现约瑟夫环地问题,C语言.doc
顺序表实现约瑟夫环地问题,C语言 计算机科学与工程学院 PAGE PAGE 2 <算法与数据结构>试验报告 计算机科学与工程学院 <算法与数据结构>试验报告[一] 专业班级 1 ...
- 数据结构与算法 实验报告一 约瑟夫环(单循环链表)
实验内容: 约瑟夫环求解. 编号为1,2,....,N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值M,从第一个人开始按顺时针方向自1开始顺序报数,报到M ...
最新文章
- Runtime.getRuntime().exec();里面产生停滞(阻塞,blocking)
- 直播源码:直播+内容营销新趋势
- location.hash属性介绍
- python Gevent – 高性能的Python并发框架
- linux下如何实现mysql数据库每天自动备份定时备份
- android gradle自定义钉钉群提醒
- 后端技术:消息队列MQ/JMS/Kafka相关知识介绍
- UML九种图 之 包图和对象图
- System V 共享内存 和 系列函数
- 集成产品开发过程及其概念模型
- 教室录播系统方案_学校教室录播系统解决方案
- 为何腾讯一直在推广“低配版”的QQ
- 计算机网络之A、B、C类网络地址
- L2-029 特立独行的幸福 (25 分)
- Win10更新后桌面右键反应慢的问题
- unity游戏开发为什么工作这么难找
- 计算机文档考试题目及答案,计算机word考试题及答案解析
- JSD-2204-API-线程API-线程锁-Day07
- ExifTool文件鉴定器
- echarts x 起始_echarts实现获取datazoom的起始值(包括x轴和y轴)