在线等待!!有关约瑟夫问题。

muhao 2003-10-17 10:23:27
链表实现的约瑟夫问题

//链表式约瑟夫问题
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
typedef struct node_type{
int seq,code;
struct node_type *next;
}link;
main()
{
int i,m,n,cn;
link *h,*p,*q;
printf("Input the first code m:");
scanf("%d",&m);//输入初始密码
printf("Input number n:");
scanf("%d",&n);//输入人数
m=m-1;
p=(link*)malloc(sizeof(link));
h=p; q=p;
printf("Input codes:");
for(i=1;i<=n-1;i++)
{
scanf("%d",&cn);
p->seq=i;p->code=cn;
p=(link*)malloc(sizeof(link));
q->next=p; q=p;
}
scanf("%d",&cn);
p->seq=n;
p->code=cn;
p->next=h;
if((n>1)&&(m==0))
{
m=h->code;printf("%d ",h->seq);
p->next=h->next;
free(h);
h=p->next;
}
p=h;
while((n>1)&&(m!=0))
{
if(m>1) for(i=1;i<=m-1;i++)p=p->next;
q=p->next;
m=q->code;
printf("%d ",q->seq);
p->next=q->next;
free(q);
n=n-1;
}
printf("%d\n",p->seq);
getch();
}
有不明白的地方如下:
在程序开始为什么要做“m=m-1”
...全文
35 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liulang203 2003-10-19
  • 打赏
  • 举报
回复
while((n>1)&&(m!=0))
{
if(m>1) for(i=1;i<=m-1;i++)p=p->next;
q=p->next;
m=q->code;
printf("%d ",q->seq);
p->next=q->next;
free(q);
n=n-1;
}
注意这一段程序。在这一段中,本来在for(.......)中是向后推了m-1个但是下面有一个q=p-next;
又向后推了一个,最后又把q释放了到最后还是向后推了m个了
playboyxp 2003-10-19
  • 打赏
  • 举报
回复
#include <iostream.h>
void main()
{
int a[17],i,j,k=1,integer;
for(i=0;i<17;i++)
a[i]=i+1;
cin>>integer;
i=-1;
while(1)
{
for(j=0;j<integer;)
{
i=(i+1)%17;
if(a[i]!=0) j++;
}
if(k==17) break;
cout<<a[i]<<" ";
a[i]=0;
k++;
}
cout<<a[i]<<endl;
}
pxwzd123 2003-10-17
  • 打赏
  • 举报
回复
请看程序中的如下代码:
if((n>1)&&(m==0))
{
...............
}
如果每数到第m个人时就出列,那么就是每隔m-1个人就出列,程序中都使用隔几个人作为标志,所以,开始就有m=m-1
mbot机器⼈巡线程序_mBot机器⼈编程——⽤机器⼈的逻辑思 考问题 mBot机器⼈编程 ——⽤机器⼈的逻辑思考问题 ⽂/陈林 提到机器⼈,想必⼤家都不会陌⽣。但如果问到什么是机器⼈时,似乎⼼中的答案并不是那么的确切了,甚⾄不知道如何回答这个问题。如 果你也对什么是机器⼈这个问题感到⽆从回答的话,那就对了,因为国际上并未有⼀个准确的定义。 什么是机器⼈? 如果你尝试去百度,你会得到:机器⼈(Robot)是⼀种能够半⾃主或全⾃主⼯作的智能机器。⽽你查阅辞海时,⼜能得到:⼀种可以接受感 应到周围变化及输⼊的机器,通常具有某种程度的⼈造智慧。⽽维基百科⾥描述的是:机器⼈包括⼀切模拟⼈类⾏为或思想与模拟其他⽣物 的机械。因此,每次课我都会⿎励孩⼦们尝试为⾃⼰所理解的机器⼈下⼀个定义。这次我也收获到了很多不同的答案,有认为机器⼈是能独 ⽴完成某⼀具体事情的机械装置,有认为机器⼈是能协助⼈完成⼯作的机器,也有同学认为机器⼈就是拓展⼈类某⼀能⼒的机械。 你为什么学习机器⼈? 机器⼈已经逐渐⾛⼊了我们的⽣活,为⼈们带来了巨⼤的便利,我们⼏乎可以预⾔,机器终将取代我们绝⼤部分的⼯作,为⼈们的⽣活带来 巨⼤的便利,包括医疗、公共服务、家庭⽣活和教育等。对的,在教育中,机器⼈除了可以充当我们的AI⽼师,如"有道"提供的"AI"英 语教育等,还可以作为学习和⾛进机器⼈世界的⼀个教育载体。很少有⼀门学科能同时涵盖了数学、物理、计算机、机械⼯程等领域。因 此,学习机器⼈可以做到多学科的融合。 如何学习机器⼈? 说起机器⼈的历史,早在1959年,机器⼈之⽗约瑟夫·恩格尔伯格便制造了世界上第⼀台⽤于⼯业⽣产的可编程机器⼈。到如今,机器⼈ 已经可以做到如索菲亚那种对答如流,能做出超过60多种表情的机器⼈,⼜或者如同波⼠顿公司⽣产的能奔跑和空翻的敏捷机器⼈。机器 ⼈发展如此迅速,要想学习机器⼈,就需要知道最根本的底层逻辑。尽管拓展到智能硬件,我们依然可以这样说,绝⼤部分的智能机械实现 逻辑都是:接收信息 处理信息 输出控制指令。因此我们的课程中包含了⼤量的项⽬,并且每⼀个项⽬都是遵循这样的逻辑实现的。 ⽤mBot机器⼈来开启你的学习之旅! mBot是MakeBlock公司⽣产的⾯向⼴⼤青少年的教育机器⼈,它⽀持图形化编程和c语⾔代码编程。其机器⼈⼤脑主板集成了RGB彩灯、 红外接收模块、蜂鸣器、电源模块和红外发射模块等。且包含了直流电件、红外遥控、蓝⽛、超声波、灰度传感器等多种外设。⾮常适合我 们初学者作为第⼀个⼊门编程和机器⼈的教具。 我们都做了些什么项⽬? 机器⼈的组装 学习mBot机器⼈的第⼀步,就是组装你⾃⼰的机器⼈,从每⼀个模块的搭建到拧上第⼀个颗螺丝再到装上电池贴上标签。是的,每⼀步都 由你⾃⼰完成,让你的机器⼈赋予上特殊的意义。 轨迹⾏⾛ 组装好的你的机器⼈了!快来试试机器⼈能跑起来吗?⾛个正⽅形试试: 超声避障 超声波模块会发出40Khz的超声波,并在阈值时间内,等待返回波,当接收到返回波时,利⽤声⾳在空⽓中的传播速度便可以计算出障碍物 的距离,当距离过近时认定为有障碍,通过控制电机让机器⼈转开。对的,机器⼈编程中,程序的⼀⼤结构就是分⽀语句。对于机器⼈⽽ ⾔,有太多的不确定性了,需要通过假设的⽅法来将接收到的信息分情况处理。这也就是规则,当它掌握的规则越多,它就越智能。 机器⼈⾛迷宫 机器⼈⾛迷宫灵感来源于"电脑⿏"⾛迷宫竞赛,我们的机器⼈在超声波的帮助下,能够轻松分辨出前⽅是否有障碍物,这样也就⾜够⾛⼀ 个简单的迷宫了。同学们尝试了利⽤随机数实现在碰到墙壁时,随机左右转,防⽌陷⼊死循环。最后在多次尝试后,挑战成功! 循线机器⼈ 利⽤双灰度传感器,加上四条规则: 1. 左边看到⽩⾊右转(左偏了) 2. 右边看到⽩⾊左转 3. 两边都为⽩停⽌ 4. 两边都为⿊前进 是的,⼈类之所以聪明,就是掌握了⼤量的规则,事物间的规则等。当我们教会机器⼈⼀些简单的规则后,它也就变得智能了。 送餐机器⼈ 很明显,我们的机器⼈⼏乎具备了简易送餐机器⼈的全部功能,能够按照指定线路⾏⾛,能够实时检测障碍物,最后就只差记录站点了。对 的,如果掌握变量的使⽤,你就可以尝试综合已经学习过的知识点,完成⼀个送餐机器⼈制作。 写在最后 初学机器⼈,你可能会发现,我们只不过是在交给机器⼈⼀些具体的规则,⽆论是让他完成智能声光控,亦或者让其送个餐,⾃动打扫⼀下 卫⽣等等,都是在不断的教会它更多的规则,让它在遇到问题的能够处理。⽽如果它变得能够处理⼀些突发性的问题,或者说当它能够创造 规则的时候,也就是⼈所具备的能⼒!⽽让机器⼈具备或延伸⼈的智能,也就是到了⼈⼯智能的领域了!
线性表 某软件公司大约有30名员工,每名员工有姓名、工号、职务等属性,每年都有员工离职和入职。 把所有员工按照顺序存储结构建立一个线性表,建立离职和入职函数,当有员工离职或入职时,修改线性表,并且打印最新的员工名单。 约瑟夫(Josephus)环问题:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列为止。 建立n个人的单循环链表存储结构,运行结束后,输出依次出队的人的序号。 栈和队列 某商场有一个100个车位的停车场,当车位未满时,等待的车辆可以进入并计时;当车位已满时,必须有车辆离开,等待的车辆才能进入;当车辆离开时计算停留的的时间,并且按照每小时1元收费。 汽车的输入信息格式可以是(进入/离开,车牌号,进入/离开时间),要求可以随时显示停车场内的车辆信息以及收费历史记录。 某银行营业厅共有6个营业窗口,设有排队系统广播叫号,该银行的业务分为公积金、银行卡、理财卡等三种。公积金业务指定1号窗口,银行卡业务指定2、3、4号窗口,理财卡业务指定5、6号窗口。但如果5、6号窗口全忙,而2、3、4号窗口有空闲时,理财卡业务也可以在空闲的2、3、4号窗口之一办理。 客户领号、业务完成可以作为输入信息,要求可以随时显示6个营业窗口的状态。 5、4阶斐波那契序列如下:f0=f1=f2=0, f3=1,…,fi=fi-1+fi-2+fi-3+fi-4, 利用容量为k=4的循环队列,构造序列的前n+1项(f0, f1 , f2 ,… fn ),要求满足fn ≤200而fn+1 >200。 6、八皇后问题:设8皇后问题的解为 (x1, x2, x3, …,x8), 约束条件为:在8x8的棋盘上,其中任意两个xi 和xj不能位于棋盘的同行、同列及同对角线。要求用一位数组进行存储,输出所有可能的排列。 7、迷宫求解:用二维矩阵表示迷宫,自动生成或者直接输入迷宫的格局,确定迷宫是否能走通,如果能走通,输出行走路线。 8、英国人格思里于1852年提出四色问题(four colour problem,亦称四色猜想),即在为一平面或一球面的地图着色时,假定每一个国家在地图上是一个连通域,并且有相邻边界线的两个国家必须用不同的颜色,问是否只要四种颜色就可完成着色。现在给定一张地图,要求对这张地图上的国家用不超过四种的颜色进行染色。 要求建立地图的邻接矩阵存储结构,输入国家的个数和相邻情况,输出每个国家的颜色代码。 9、以下问题要求统一在一个大程序里解决。 从原四则表达式求得后缀式,后缀表达式求值,从原四则表达式求得中缀表达式,从原四则表达式求得前缀表达式,前缀表达式求值。 数组与广义表 鞍点问题: 若矩阵A中的某一元素A[i,j]是第i行中的最小值,而又是第j列中的最大值,则称A[i,j]是矩阵A中的一个鞍点。写出一个可以确定鞍点位置的程序。 稀疏矩阵转置: 输入稀疏矩阵中每个元素的行号、列号、值,建立稀疏矩阵的三元组存储结构,并将此矩阵转置,显示转置前后的三元组结构。 用头尾链表存储表示法建立广义表,输出广义表,求广义表的表头、广义表的表尾和广义表的深度。 树和二叉树 以下问题要求统一在一个大程序里解决。 按先序遍历的扩展序列建立二叉树的存储结构 二叉树先序、中序、后序遍历的递归算法 二叉树中序遍历的非递归算法 二叉树层次遍历的非递归算法 求二叉树的深度(后序遍历) 建立树的存储结构 求树的深度 图 输入任意的一个网,用普里姆(Prim)算法构造最小生成树。 要求建立图的存储结构(邻接表或邻接矩阵),输入任意的一个图,显示图的深度优先搜索遍历路径。 要求建立图的存储结构(邻接表或邻接矩阵),输入任意的一个图,显示图的广度优先搜索遍历路径。 查找 设计一个读入一串整数构成一颗二叉排序树的程序,从二叉排序树中删除一个结点,使该二叉树仍保持二叉排序树的特性。 24、设定哈希函数 H(key) = key MOD 11 ( 表长=11 ),输入一组关键字序列,根据线性探测再散列解决冲突的方法建立哈希表的存储结构,显示哈希表,任意输入关键字,判断是否在哈希表中。 排序 以下问题要求统一在一个大程序里解决。 25、折半插入排序 26、冒泡排序 27、快速排序 28、简单选择排序 29、归并排序 30、堆排序
做一门精致,全面详细的 java数据结构与算法!!!让天下没有难学的数据结构,让天下没有难学的算法,不吹不黑,我们的讲师及其敬业,可以看到课程视频,课件,代码的录制撰写,都是在深夜,如此用心,其心可鉴,他不掉头发,谁掉头发???总之你知道的,不知道的,我们都讲,并且持续更新,走过路过,不要错过,不敢说是史上最全的课程,怕违反广告法,总而言之,言而总之,这门课你值得拥有,好吃不贵,对于你知识的渴求,我们管够管饱话不多说,牛不多吹,我们要讲的本门课程内容:稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法马踏棋盘算法。
1、某软件公司大约有30名员工,每名员工有姓名、工号、职务等属性,每年都有员工离职和入职。 把所有员工按照顺序存储结构建立一个线性表,建立离职和入职函数,当有员工离职或入职时,修改线性表,并且打印最新的员工名单。 2、约瑟夫(Josephus)环问题:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列为止。 建立n个人的单循环链表存储结构,运行结束后,输出依次出队的人的序号。 3、某商场有一个100个车位的停车场,当车位未满时,等待的车辆可以进入并计时;当车位已满时,必须有车辆离开,等待的车辆才能进入;当车辆离开时计算停留的的时间,并且按照每小时1元收费。 汽车的输入信息格式可以是(进入/离开,车牌号,进入/离开时间),要求可以随时显示停车场内的车辆信息以及收费历史记录。 4、某银行营业厅共有6个营业窗口,设有排队系统广播叫号,该银行的业务分为公积金、银行卡、理财卡等三种。公积金业务指定1号窗口,银行卡业务指定2、3、4号窗口,理财卡业务指定5、6号窗口。但如果5、6号窗口全忙,而2、3、4号窗口有空闲时,理财卡业务也可以在空闲的2、3、4号窗口之一办理。 客户领号、业务完成可以作为输入信息,要求可以随时显示6个营业窗口的状态。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧