编号为1,2,…,n的n个人按顺时针方向围坐一圈每人持有一个密码(正整数),一开始人选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报道m时停止报数.报m的人出

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/07 19:07:53
编号为1,2,…,n的n个人按顺时针方向围坐一圈每人持有一个密码(正整数),一开始人选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报道m时停止报数.报m的人出

编号为1,2,…,n的n个人按顺时针方向围坐一圈每人持有一个密码(正整数),一开始人选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报道m时停止报数.报m的人出
编号为1,2,…,n的n个人按顺时针方向围坐一圈
每人持有一个密码(正整数),一开始人选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报道m时停止报数.报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序.
采用单向循环链表模拟此过程,按照出列的顺序印出各人的编号
用C语言版的数据结构编写
用C语言版的数据结构编写
用C语言版的数据结构编写
用C语言版的数据结构编写
用C语言版的数据结构编写
用C语言版的数据结构编写
测试数据:
m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,则正确的输出是什么?
输入数据:处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表.
不要c++

编号为1,2,…,n的n个人按顺时针方向围坐一圈每人持有一个密码(正整数),一开始人选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报道m时停止报数.报m的人出
#define ERROR 0
#define OK 1
#include
#include
struct CirNode/*定义每个结点的类型 */
{
int data;/*每个人所拥有的密码*/
int num;/*每个人在圈中的位序*/
struct CirNode *next;
};
int a[30]; /*人数要求≤30 */
struct CirNode *CreateList(int n)/*生成n个结点的单向循环链表 */
{
struct CirNode *L,*p,*q;
int i;
int j=1;
L=q=(struct CirNode*)malloc(sizeof(struct CirNode));/*建立一个不带头结点的单向循环链表 */
if(!q) return ERROR;
printf("shu ru mei ge ren de mi ma:\n");
q->num=j;
printf("%d.data=",j);
scanf("%d",&q->data);
j++;
q->next=L;
for(i=1;inum=j;
printf("%d.data=",j);
scanf("%d",&p->data);
j++;
q->next=p;
p->next=L;
q=q->next;
}/*for*/
return (L);
}/*Create*/
struct CirNode *DeleteList(struct CirNode *L,int m,int n)/*报m的人出列*/
{
int i,j=0;
int k=n;
struct CirNode *p,*q,*pre;
pre=p=L;
do
{
i=1;
while(inext;i++;}
if(m==1)
{
while(pre->next!=p) pre=pre->next;
m=p->data;/*得到新的密码 */
a[j]=p->num;/*得到出列人的序号 */
q=p;
pre->next=p->next;
p=p->next;
free(q);
L=pre=p;/*让新的报1的人作为头结点 */
k--;j++;
}/*if */
else
{
q=p->next;
m=q->data;
a[j]=q->num;
p->next=q->next;
p=q->next;
free(q);
L=pre=p;
k--;j++;
}/*else*/
}while(k>1);
a[j]=p->num;/*最后一个出列人的序号 */
printf("xian zai suo you ren chu lie.\n");
return (L);
}/*DeleteList*/
int main()
{
struct CirNode *L;
int i,n,m;
printf("\n");
printf("qing shu ru ren shu,n=");
scanf("%d",&n);
if(n>30||n

在控制台下实现约瑟夫环.编号为1,2,3,……,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码一、问题描述 在控制台下实现约瑟夫环.编号为1,2,3,……,n 的 n 个人按顺时针方向围坐一圈,每 约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个用C++怎么实现,求助…… 约瑟夫环编号为1,2,3,……,n的n个人按顺时针方向围坐一圈.任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数.报m的人出列,从他在顺时针方向上的 编号为1,2,.,n的n个人按照顺时针方向围坐一圈,每个人有且只有一个密码(正整数)……数组解决?编号为1,2,.,n的n个人按照顺时针方向围坐一圈,每个人有且只有一个密码(正整数).一开始任 选班长问题,用数据结构C语言设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码.开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报 How to solve 约瑟夫问题 by C++ ?约瑟夫问题:设编号为1,2,…,n的n(n>0)个人按顺时针方向围坐一圈,每人持有一正整数密码.开始时任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1 新的 猴子选大王 代码 猴子选大王 功能:设编号为1,2,3,……,n的n(n>0)个猴子按顺时针方向围坐 排序系统设计 功能:设编号为1,2,3.,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密哥哥救命啊 编号为1,2,…,n的n个人按顺时针方向围坐一圈每人持有一个密码(正整数),一开始人选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报道m时停止报数.报m的人出 1、编写程序,模拟约瑟夫环(josephus)问题:n个人(编号为1,2,3,……,n (n>0) )按顺时针方向围坐一圈,每人持有一个正整数密码.开始时任意给出两个值:一个为首先报数的人的编号i (0 编号是1,2,……,n的n个人按照顺时针方向围坐一圈,一开始任选一个正整数作为报数上限(开始 编号是1,2,……,n的n个人按照顺时针方向围坐一圈,一开始任选一个正整数作为报数上限(开始 设编号从1,2,...,n的n个人围坐一圈,约定编号为k(1 编号为 1,2,----,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始人选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数.报m的人 分别用数组和链表实现约瑟夫环.约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人 有n盏灯 编号1~n 第一个人把所有灯点亮 ,第2个人按下所有编号为2的倍有n盏灯 编号1~n 第一个人把所有灯点亮 ,第2个人按下所有编号为2的倍数的灯开关,第3人按编号为3的灯(其中关的灯被 有n盏灯 编号1~n 第一个人把所有灯点亮 ,第2个人按下所有编号为2的倍有n盏灯 编号1~n 第一个人把所有灯点亮 ,第2个人按下所有编号为2的倍数的灯开关,第3人按编号为3的灯(其中关的灯被 求C语言实现约瑟夫环!1.编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报