南渊438
2022-03-24 14:21
采纳率: 83.3%
浏览 63

c语言,链表问题,约瑟夫杯,

问题遇到的现象和发生背景

N个人围成一圈顺序编号,从1号开始按1、2、3顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。

输入格式:
输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。

输出格式:
按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。

问题相关代码,请勿粘贴截图

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}node;

int kong(node *l)
{
if(l->next=l) return 0;
else return 1;
}

node *tou(){
node l;
l=(node
)malloc(sizeof(node));
l->next=l;
return l;
}
void Creatlist(node *l,int n){
node *q;
q=l;
for(int i=1;i<=n;i++)
{
node *p;
p=(node*)malloc(sizeof(node));
p->data=i;
p->next=l;
q->next=p;
q=q->next;
}
}
void yuesefu(node *l,int p)
{
node *m;
m=l->next;
int a=1;
while(kong(l)){
if(a==p){
printf("%d\n",m->data);
node *n;
n=m;
m=m->next;
free(n);
a=0;
}
else
{a++;m=m->next;}
}

}

int main()
{
int n,p;
scanf("%d%d",&n,&p);
node *l;
l=tou();
Creatlist(l,n);
yuesefu(l,p);
return 0;
}

运行结果及报错内容
我的解答思路和尝试过的方法

这是我写的代码,没有编辑错误,但是没有输出,这是怎么回事?希望各位不吝赐教

我想要达到的结果
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题