约瑟夫环问题,急!题目要求-所用的单循环链表中不需要“头结点”,我不会,请教各位高手!约瑟夫环问题 [问题描述]编号是1
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/08/31 12:55:11
约瑟夫环问题,急!
题目要求-所用的单循环链表中不需要“头结点”,我不会,请教各位高手!
约瑟夫环问题
[问题描述]
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数.报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止.设计一个程序来求出出列顺序.
[基本要求]1.利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号.此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限.
2.向上述程序中添加在顺序结构上实现的部分.
[测试数据] m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=则正确的输出是什么?
要求:
输入数据:首先输入待处理人员数及他们的密码,然后输入m的初值,建立单循环链表.
输出形式:建立一个输出函数,将正确的出列序列输出.
编程语言是C++.
题目要求-所用的单循环链表中不需要“头结点”,我不会,请教各位高手!
约瑟夫环问题
[问题描述]
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数.报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止.设计一个程序来求出出列顺序.
[基本要求]1.利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号.此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限.
2.向上述程序中添加在顺序结构上实现的部分.
[测试数据] m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=则正确的输出是什么?
要求:
输入数据:首先输入待处理人员数及他们的密码,然后输入m的初值,建立单循环链表.
输出形式:建立一个输出函数,将正确的出列序列输出.
编程语言是C++.
这个是我写滴带头节点滴
C语言的,给你参考参考
/*计算机071 冯**编写的约瑟夫环
单项循环链表实现 原创程序
在结构体中定义了一个序号,使得空间变大,但是程序简单易懂
*/
#include
#include
struct node
{
int num;//为方便表达,每个节点拥有一个序号
int password;//密码
struct node *next;
};
node * creatlist(int people)//构造链表
{
int i=1;//序号
int _password;
node *r,*s;
node *L=(node *)malloc(sizeof(node));//创造头结点
r=L;
while(inum=i;
s->password=_password;
r->next=s;
r=s;
i++;
}
r->next=L;//循环链表
return L;
}
void getoutseq(node *L,int firstp)//计算出列顺序并输出的函数
{
int _password=firstp;
node *p=L;
node *r=L;//r为p的前驱节点
int i=1;
while(L->next!=L)//当L为非空表时一直循环,空表表示所有人已经出列,则退出循环
{
while (inext!=L)//当p的下一个节点非头结点,直接向下移
{
r=p;//p移动前先备份
p=p->next;
}
else//当p的下一个节点是头节点,则令p指向一号节点
{
r=L;
p=L->next;
}
i++;
}
printf("%d号出列\n",p->num);
_password=p->password;//获取节点中的密码
r->next=p->next;//删除并释放p
free(p);
i=1;
p=r;
}
printf("结束!\n");
}
/*
void print(node *L)//该函数用于打印每个节点的信息,方便测试
{
node *p=L->next;
while(p!=L)
{
printf("序号%d密码%d\n",p->num,p->password);
p=p->next;
}
}
*/
int main()
{
node *list;
int people;
int firstp;
printf("请输入人数:");
scanf("%d",&people);
putchar('\n');
printf("请输入初始密码:");
scanf("%d",&firstp);
putchar('\n');
list=creatlist(people);
/* print(list); //该语句用于测试
*/
getoutseq(list,firstp);
printf("按确定键退出.");
getchar();
getchar();
return 0;
C语言的,给你参考参考
/*计算机071 冯**编写的约瑟夫环
单项循环链表实现 原创程序
在结构体中定义了一个序号,使得空间变大,但是程序简单易懂
*/
#include
#include
struct node
{
int num;//为方便表达,每个节点拥有一个序号
int password;//密码
struct node *next;
};
node * creatlist(int people)//构造链表
{
int i=1;//序号
int _password;
node *r,*s;
node *L=(node *)malloc(sizeof(node));//创造头结点
r=L;
while(inum=i;
s->password=_password;
r->next=s;
r=s;
i++;
}
r->next=L;//循环链表
return L;
}
void getoutseq(node *L,int firstp)//计算出列顺序并输出的函数
{
int _password=firstp;
node *p=L;
node *r=L;//r为p的前驱节点
int i=1;
while(L->next!=L)//当L为非空表时一直循环,空表表示所有人已经出列,则退出循环
{
while (inext!=L)//当p的下一个节点非头结点,直接向下移
{
r=p;//p移动前先备份
p=p->next;
}
else//当p的下一个节点是头节点,则令p指向一号节点
{
r=L;
p=L->next;
}
i++;
}
printf("%d号出列\n",p->num);
_password=p->password;//获取节点中的密码
r->next=p->next;//删除并释放p
free(p);
i=1;
p=r;
}
printf("结束!\n");
}
/*
void print(node *L)//该函数用于打印每个节点的信息,方便测试
{
node *p=L->next;
while(p!=L)
{
printf("序号%d密码%d\n",p->num,p->password);
p=p->next;
}
}
*/
int main()
{
node *list;
int people;
int firstp;
printf("请输入人数:");
scanf("%d",&people);
putchar('\n');
printf("请输入初始密码:");
scanf("%d",&firstp);
putchar('\n');
list=creatlist(people);
/* print(list); //该语句用于测试
*/
getoutseq(list,firstp);
printf("按确定键退出.");
getchar();
getchar();
return 0;
ACM约瑟夫环数学问题
急求 约瑟夫C语言的问题
约瑟夫环问题,用C语言编写
约瑟夫环(Joseph)问题数据结构的实验.c++编程~
约瑟夫斯问题谁知道?
约瑟夫问题:n个骑士编号1,2,.,围坐圆桌旁找出最后留在圆桌旁的骑士编号(1)编
约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个
数据结构的题目.用数组和链表存储方式实现约瑟夫问题.约瑟夫问题: n个人围成一个圆圈,首先第一个人从1开始一个人一个人顺
约瑟夫难题的约瑟夫指的是哪位约瑟夫?
/*3、约瑟夫问题约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到
我有一个关于约瑟夫问题的程序,但是不懂,包括变量的含义和语句实现的功能
C语言编的约瑟夫问题(猴子选大王)求大神看哪里错了