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

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/03 21:06: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语言实现

编号为 1,2,----,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始人选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数.报m的人
以前自己做的.
/*
编号为1、2..n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数),
一开始任选一个正整数作为报数的上限值m,从第一个人开始自1开始报数,报到m停止
,报m的人出列,将他的密码作为新的m值,从下一个人开始重新报数,直至所有人全部
出列为止,设计一个出列顺序.
*/
#include
struct Node
{
int data;
struct node *next;
};
void main()
{
int i=0,j=0; //循环变量
int n,m; //n表示输入的人数 m表示初始密码
struct Node *head,*p1,*p2; //head链表头节点、p1、p2构建链表的临时节点
printf("请输入人数:");
scanf("%d",&n);
head = p1 = (struct Node*)malloc(sizeof(struct Node)); //分配一个空间,将head、p1指向该空间
while (idata);
p1 = (struct Node*)malloc(sizeof(struct Node));
p2->next = p1;
i++;
}
printf("请输入第%d个人的密码:",i+1); //给最后一个节点赋值
scanf("%d",&p1->data);
p1->next = head; //将最后一个节点的next指向头节点,构成循环单链表
i = 0;
p2 = head;
while (idata);
p2 = p2->next;
i++;
}
printf("请输入一个密码:");
scanf("%d",&m);
p2 = p1;
while(jdata);
p2->next = p1->next;
m = p1->data;
p1 = p2;
j++;
}
}