求C语言实现约瑟夫环!1.编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/30 02:48:38
求C语言实现约瑟夫环!1.编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报
xU[OF+[UE @cJU>Tm_BbJ2I )Kp ,.a!dYBJ۬sRygw3crި>֚R6;mY0uq/r߹*8BjRUR/Bv4^d=^p]mpYHdΓryd#uKwbŲn9+ԉPesZ2qvub! ZNz2|J p&c.ߌOk8jTzmlJ wBMkoWV!IP k3ۤW6a 0NV'ze$ыt>Δ^rcj{;k*!u7ʁ~ØUXqO& FUk5Da捹nܲ:R.ra2ɱ}A7WI())ʙU%,li>6dFavAwd 8S:km(ή i7m| Jj4 9B0ϋjgUp~φIޏEgRx&$eb20;4 0Oȳl Se~yDLJNܣd%0NR*kB`k旔l$޿y ,{rACkJf@a$lEMY!决)n8|: |?*[JQ$3>':΄ɦxOd' iT,} 'v kVfx6ѯQC(24:e(N=n7ׯcCIh[FaCuv|* OE=9W!Kk y[l&9%8SpcdN;K/l-dn`a܍F'/.Ɖ֮(; h:pDzè##05f^Tu-;g/{~w9J1'&-diҎ{1B?Jn

求C语言实现约瑟夫环!1.编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报
求C语言实现约瑟夫环!
1.编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数.报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止.设计一个程序来求出出列顺序.
2.基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号.程序开始执行时输入人数n及各人密码和m的初值,得出输出序列.
我在网上找到一些代码,但是不是很懂,求有详细注释的代码(就是中间过程基本都有注释的),

求C语言实现约瑟夫环!1.编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报

我们学校OJ上面提交通过了的.

就是一个链表里面 存储四个变量

sum:序列编号也就是这是第几个数

2.number:这个数的值

3.flag先全部赋值为1,如果被抽到就赋值为0表示被踢出去了.

这类型的指针

你要是要注释,待会有空写.



#include <stdio.h>
#include "stdlib.h"
#include<iostream>
using namespace std;
#include<cstdlib>

typedef struct DNode
{
int sum;
int number;
int flag;
struct DNode *next;
}sqlist;

sqlist *head,*up,*down,*down2;
int sum1=1;
int n;


void insert(int data)
{

sqlist *up=(sqlist *)malloc(sizeof(sqlist));
if (head==NULL)
{   
down=head=up;
head->sum=sum1++;
up->number=data;
up->flag=1;

head->next=NULL;

}
else 
{   
down->next=up;
up->sum=sum1++;
up->number=data;
up->flag=1;

up->next=NULL;
down=up;
}

}

void  FindAndrePlace(int k)
{

int sum=0,sn=1,snn=n;

up=head;

while(n--)
{
while(1)
{
if(up->flag==1)
{
sum++;


if(sum==k&&up->flag==1)
{    
if(sn==snn)
{printf("%d",up->number);}
sn++;
up->flag=0;
sum=0;
break;
}

     if(up->next==NULL){up=head;}
else {up=up->next;}
}

}
}

int main()
{
down=up=head=NULL;

    int data,k,i;
cin>>n;

for(i=1;i<=n;i++)
{
data=i;
insert(data);
}

int local=1;
cin>>k;
if(n==1){printf("1");}
else{
FindAndrePlace(k);}
return 0;

}

求C语言实现约瑟夫环!1.编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报 用数据结构的单循环链表写的约瑟夫环(C语言),哪错了?约瑟夫环 问题描述:约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持一个密码(正整数).一开始任选 C语言采用单向环表实现约瑟夫环请按以下要求编程实现:① 从键盘输入整数m,通过create函数生成一个具有m个结点的单向环表.环表中的结点编号依次为1,2,……,m.② 从键盘输入整数s(1 急求 约瑟夫C语言的问题 分别用数组和链表实现约瑟夫环.约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人 在控制台下实现约瑟夫环.编号为1,2,3,……,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码一、问题描述 在控制台下实现约瑟夫环.编号为1,2,3,……,n 的 n 个人按顺时针方向围坐一圈,每 求数据结构算法!急用!1、 约瑟夫环问题约瑟夫问题的描述是:编号为 1,2,----,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始人选一个正整数作为报数上限值m,从第一个 约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个用C++怎么实现,求助…… 约瑟夫环问题,用C语言写要有注释, 约瑟夫环 已知n个人围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列,m是什么n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数.求胜利者的编号.m是什 约瑟夫环(Joseph)问题数据结构的实验.c++编程~约瑟夫环(Joseph)问题的一种描述是:编号为1,2,…,n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数 约瑟夫环问题,急!题目要求-所用的单循环链表中不需要“头结点”,我不会,请教各位高手!约瑟夫环问题 [问题描述]编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正 数据结构试验设计上老师提出了一个问题,关于线性结构的应用,约瑟夫环问题 小弟才疏学浅,约瑟夫问题的一种描述是:编号为1,2,...,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正 约瑟夫环问题,用C语言编写设N个人围坐一圈,并按顺时针方向1-N编号,从s个人开始报数,报到第m个人,此人出圈,后面的人继续从1到m报数,直到最后一个人, C语言程序设计题 做出一题就可以啦………………综合实验二 约瑟夫环问题 1.实验说明 已知n个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围.从编号为k(1 k n)的人开始报数,数到m的 约瑟夫问题:n个骑士编号1,2,.,围坐圆桌旁找出最后留在圆桌旁的骑士编号(1)编编写一个函数模板,以一种顺序容器的类型作为模板参数,在模板中使用指定类型的顺序容器求解约瑟夫问题,m,n是 怎样用C语言实现1!+2!+3! 约瑟夫环问题 谢谢 在线等约瑟夫环问题是算法设计中的一个经典问题,是顺序编号的一组n个人围坐一圈,从第1个人按一定方向顺序报数,在报到m时该人出列,然后按相同方法继续报数,直到所有