约瑟夫环c语言
答案:2 悬赏:30 手机版
解决时间 2021-02-15 01:18
- 提问者网友:人生佛魔见
- 2021-02-14 07:00
我的程序总是死循环 可是我又找不到错在哪谁能帮忙看看 谢谢!!
#include
#include
typedef struct lnode{
int data;
struct lnode *next;
}lnode,*linklist;
void createlist(linklist *l,int n){
int i;
linklist p;
*l=(linklist)malloc(sizeof(struct lnode));
(*l)->next=NULL;
for(i=n;i>0;--i){
p=(linklist)malloc(sizeof(struct lnode));
p->data=i;
p->next=(*l)->next;
(*l)->next=p;}
while(p->next) p=p->next;
p->next=*l;
}
void listdelete(linklist *l,int i,int j){
int k=0,a;
linklist p=*l,q=*l,o;
while(k {
p=p->next;
k++;
}
k=0;
while((*l)->next!=*l)
{while(k {
p=p->next;
if(p==*l) p=p->next;
k++;
}
while(q->next!=p) q=q->next;
o=p;
q->next=p->next;p=q->next;
a=o->data;
free(o);
printf("%d ",a);
k=0;}
}
main(){
int i,m,s,n;
linklist la,lb;
scanf("%d,%d,%d",&m,&s,&n);
createlist(&la,m);
listdelete(&lb,s,n);}
最佳答案
- 五星知识达人网友:躲不过心动
- 2021-02-14 07:25
#include
#include
#define FALSE 0
#define TRUE 1
typedef int DataType;
struct Node;
typedef struct Node *PNode;
struct Node
{ DataType info;
PNode link;
};
typedef struct Node *LinkList;
typedef LinkList *PLinkList;
int init_clist( PLinkList pclist, int n )
{ PNode p,q;
int i;
q = (PNode)malloc( sizeof( struct Node ) );
if ( q == NULL ) return ( FALSE );
*pclist=q;
q->info = 1;
q->link = q;
if (n==1) return (TRUE);
for(i=2;i
{ p=(PNode)malloc(sizeof(struct Node));
if (p==NULL) return(FALSE);
p->info=i;
p->link=q->link;
q->link=p;
q=p;
}
return (TRUE);
}
void josephus_clist( PLinkList pclist, int s,int m )
{PNode p,pre;
int i;
p=*pclist;
if (s==1)
{pre =p;
p=p->link;
while (p!=*pclist)
{
pre =p;
p=p->link;
}
}
else for(i=1;i
{
pre =p;
p=p->link;
}
while (p!=p->link)
{ for (i=1;i
{ pre = p;
p = p->link;
}
printf(“ out element: %d \n”,p->info);
if (*pclist ==p)
*pclist =p->link;
pre->link = p->link;
free(p);
p = pre->link;
}
printf(“ out element: %d \n”,p->info);
*pclist=NULL;
free(p);
}
main( )
{LinkList jos_clist;
int n,s,m;
do{
printf(“\n please input the values of n = “);
scanf(“%d”,&n);
}while (n<1);
do{
printf(“ please input the values of s = “);
scanf(“%d”,&s);
}while (s<1);
do{
printf(“ please input the values of m = “);
scanf(“%d”,&m);
}while (m<1);
if (init_clist(&jos_clist,n))
josephus_clist(&jos_clist,s,m);
else
printf(“Out of space!\n”);
}
全部回答
- 1楼网友:夜余生
- 2021-02-14 07:38
约瑟夫环
a) 问题描述:joseph问题的一种描述是:编号为1、2、……、n的n个人按顺时针方向围坐一
圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开
始顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,
从他在顺时针方向的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设
计一个程序求出出列顺序。
b) 基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。
c) 测试数据:m的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先报m的人
为6(正确的出列顺序应为6,1,4,7,2,3,5)。
实现提示:程序运行后,首先要求用户指定初始报数上限值,然后读取各人的密码。可设n <=30。
#include <stdio.h>
#include <stdlib.h>
typedef int elemtype;
typedef struct lnode{
elemtype data;int num;
struct lnode *next;
}lnode,*linklist;
void createlist_l(linklist *l,int n)
{ int i=0;
elemtype e;
linklist p,q;
*l=(linklist)malloc(sizeof(lnode));
(*l)-> next=null;(*l)-> data=n;
q=*l;
while(i <n)
{ scanf("%d",&e);
p=(linklist)malloc(sizeof(lnode));
p-> data=e;p-> num=i+1;
p-> next=null;
q-> next=p;
q=p;
i++;
}
p-> next=(*l)-> next;
}
void printlist(linklist l)
{ int i=0;
linklist p;
p=l-> next;
while(i <l-> data)
{
printf("%5d",p-> data);
p=p-> next;
i++;
}
printf("\n");
}
void put(linklist *l)
{ int i,m;linklist p,q;
printf("input a number:\n");
scanf("%d",&m);
q=(*l)-> next;
while((*l)-> data)
{for(i=0;i <m-1;i++)
{p=q;
q=q-> next;
}
printf("%5d",q-> num);
m=q-> data;
p-> next=q-> next;
free(q);
q=p-> next;
(*l)-> data=(*l)-> data-1;
}
}
void main()
{linklist l;
int a;
printf("请输入人数:");
scanf("%d",&a);
printf("请输入密码:");
createlist_l(&l,a);
printf("您输入的数字为:\n");
printlist(l);
put(&l);
}
|
|
|
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯