编号是1,2,……,n的n个人按照顺时针方向围坐一圈,一开始任选一个正整数作为报数上限(开始
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/30 20:57:34
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,一开始任选一个正整数作为报数上限(开始
![编号是1,2,……,n的n个人按照顺时针方向围坐一圈,一开始任选一个正整数作为报数上限(开始](/uploads/image/z/16709488-16-8.jpg?t=%E7%BC%96%E5%8F%B7%E6%98%AF1%2C2%2C%E2%80%A6%E2%80%A6%2Cn%E7%9A%84n%E4%B8%AA%E4%BA%BA%E6%8C%89%E7%85%A7%E9%A1%BA%E6%97%B6%E9%92%88%E6%96%B9%E5%90%91%E5%9B%B4%E5%9D%90%E4%B8%80%E5%9C%88%2C%E4%B8%80%E5%BC%80%E5%A7%8B%E4%BB%BB%E9%80%89%E4%B8%80%E4%B8%AA%E6%AD%A3%E6%95%B4%E6%95%B0%E4%BD%9C%E4%B8%BA%E6%8A%A5%E6%95%B0%E4%B8%8A%E9%99%90%EF%BC%88%E5%BC%80%E5%A7%8B)
#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
再问: 我不是很明白,能否注明每段程序的意思?谢谢!
再答: 晕,已经注明了啊。 int data;/*每个人所拥有的密码*/ int num;/*每个人在圈中的位序*/ *************/* ......... */
#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
再问: 我不是很明白,能否注明每段程序的意思?谢谢!
再答: 晕,已经注明了啊。 int data;/*每个人所拥有的密码*/ int num;/*每个人在圈中的位序*/ *************/* ......... */
约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个
设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人
C 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一
原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,……,n.从编号是1 的人开始报数
数据结构课程设计:设有n个人围坐在一个圆桌周围,编号为1,2,…,n.现在从第s个人开始逆序报数,即:第s个
设编号从1,2,...,n的n个人围坐一圈,约定编号为k(1
猴子选大王n只猴子围坐成一个圈,按顺时针方向从1到n编号.然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,
C语言:有n个人围成一圈,按顺序从1到n编号.从第一个人开始报数,报数3的人退出圈子
C语言 有n个人围成一圈,按顺序从1到n编号.从第一个人开始报数,报数3的人退出圈子
新的 猴子选大王 代码 猴子选大王 功能:设编号为1,2,3,……,n的n(n>0)个猴子按顺时针方向围坐
有n个人围成一圈,按顺序从1到n编号.从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,
约瑟夫环 已知n个人围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列,m是什么