问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求大神 分析C语言约瑟夫环问题(最好能在程序旁边写注释) 悬赏分多多送上!!!

发布网友 发布时间:2022-06-15 23:20

我来回答

2个回答

热心网友 时间:2023-11-21 00:03

这是我自己写的程序,直接运行就是正确结果了,要是有哪里有不懂的地方,再问吧……

#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *link;
}LNode,*LinkList;

int main()
{
LinkList p,r,list=NULL;
int i,n,num,start;
//此处n是指所有人数
//此处start是指从编号为start的人开始报数
//此处num是指数到num的人出列
scanf("%d%d%d",&n,&num,&start);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=i;
if(list==NULL)
list=p;
else
r->link=p;
r=p;
}
p->link=list;
p=list;
//以上是构建了一个循环链表,链表不带头结点
for(i=1;i<start;i++)
{
r=p;
p=p->link;
}
//以上是得到了起始编号start的指针p,其前缀指针为r
while(p->link!=p)
{
for(i=1;i<num;i++)
{
r=p;
p=p->link;
}
//此时p是应当被删除的一位,r是p的前缀指针
r->link=p->link;
printf("%d ",p->data);
free(p);
p=r->link;
}
printf("\n最后被删除的结点是%d\n",p->data);
}

热心网友 时间:2023-11-21 00:03

参考一下这个约瑟夫环程序吧
#include<stdio.h>
#include<stdlib.h>
#define N 9
#define OVERFLOW 0
#define OK 1
int KeyW[N]={4,7,5,9,3,2,6,1,8};

typedef struct LNode{
int keyword;
struct LNode *next;
}LNode,*LinkList;
void Joseph(LinkList p,int m,int x)
{
LinkList q;
int i;
if(x==0)return;
q=p;
m%=x;/*获取头结点*/
if(m==0)m=x;/*取余*/
for(i=1;i<=m;i++)/*找到下一个结点*/
{
p=q;
q=p->next;
}
p->next=q->next;/*移动结点*/
i=q->keyword;/*获取编号*/
printf("%d ",q->keyword);
free(q);/*释放结点*/
Joseph(p,i,x-1);/*递归调用*/
}

int main()
{
int i,m;
LinkList Lhead,p,q;
Lhead=(LinkList)malloc(sizeof(LNode));/*申请结点空间*/
if(!Lhead)return OVERFLOW;
Lhead->keyword=KeyW[0];/*数据域赋值*/
Lhead->next=NULL;
p=Lhead;/*指向头结点*/
for(i=1;i<9;i++)
{
if(!(q=(LinkList)malloc(sizeof(LNode))))return OVERFLOW;
q->keyword=KeyW[i];/*数据域赋值*/
p->next=q;
p=q;/*移动到下一结点*/
}
p->next=Lhead;/*尾结点指向头结点,形成循环链表*/
printf("Please input the first recode m:\n");
scanf("%d",&m);/*输入起始位置*/
printf("The output alignment is:\n");
Joseph(p,m,N);/*调用函数*/
return OK;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...啊?我从嘴里吐出去是直的算过肺了吗?我不会从鼻子里出去_百度... 恶心呕吐是什么? 高考数学大题应注意哪些问题呢? 高考数学可不可以用高等数学啊 高考数学 基础知识点 常见考查方式 高考数学考什么内容 一般纳税人如何交所得税 以前的QQ忘记密码了那时候不要了就不找回密码了,现在想找回来,但是又没... 常州机场坐飞机流程 常州机场大巴时刻表 ...我早上九点起飞的飞机, 然后我这的机场快线大巴到机场时70分钟,_百 ... 3匹空调配配32安单匹漏电保护器可以吗? 我给对方转账,对方的账户提示有欺诈风险,这个还可以转账给他吗? 我的微信转账给别人的账户怎么显示有欺诈风险呢? 对讲机厂家推介,质量好的对讲机厂家哪个好,是进口的还是国产的好? 化工行业用对讲机有什么强制标准吗? 删过的微信好友从以前的评论里翻出来变成了wxid的乱码,什么情况? 微信删除好友后他的变成wxid 为什么所有微信好友的都变成了wxid开头的一些数字?- 问一问 互删后变成wxid后突然变回微信名 微信删除好友之后对方的变成wxid微信删除好友之后,从朋友圈评论点进去微信变成了wxid开头_百度问一问 删过的微信好友从以前的评论里翻出来变成了wxid的乱码,加过去对方能收到好友验证吗? 微信删除好友之后对方的变成wxid 香菜能当作青菜炒着吃吗 人前一套、背后一套、是什么意思、解、一个十二生肖、又是那个动物 沈阳到三亚玩,跟什么团走比较好?推荐几个沈阳的旅行团呗?要品质的,实惠的,少购物的。 转转为什么不符合回收条件 靓号头条是做什么的一个网站呢? 有三个八手机靓号的人一般是做什么的 管必红的生平经历 宣城市杨柳的职高可以高考吗?跟高中生有区别吗? 约瑟夫环问题的详细解题思路 用循环链表实现约瑟夫环问题的设计分析(要详细点的) 求解约瑟夫环问题算法 约瑟夫环问题求解啊! 梦见龙卷风里有火是什么意思? 昨晚梦到天上几十个月亮,还有很大火龙卷风!只想跟一个喜欢自己的人看而不是自己喜欢的人,~什么意思, 篮球球商是天生的吗,怎么提高球商 用艾草药包泡脚,泡了几天,突然脚起小疙瘩,晚上痒,白天不养!怎么会是? 怎么提高球商? 篮球球商高的十大表现 夏天的田野的日记50字 在背英语作文的时候,明明知道后面是啥,但就是背不出来,该怎么办? 英语作文该如何背下来? 怎样快速有效的背英语作文? 怎样背诵英语作文? 怎么快速背英语作文 背诵英语作文的好处是什么 英语作文背诵 4.65化成分数是多少 直播分享多长时间