好宋 2022-03-24 14:21 采纳率: 83.3%
浏览 107
已结题

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条回答 默认 最新

  • 浪客 2022-03-24 14:41
    关注

    kong 里面改为 == 或者

    int kong(node *l)
    {
        return !(l->next == l);
    }
    
    
    
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct Node
    {
        int data;
        struct Node *next;
    } node;
    
    node *Creatlist(int n)
    {
        node *l, *q, *p;
        l = (node *)malloc(sizeof(node));
        l->data = 1;
        l->next = l;
        q = l;
        for (int i = 2; i <= n; i++)
        {
            p = (node *)malloc(sizeof(node));
            q->next = p;
            p->data = i;
            p->next = q;
            q = p;
        }
        q->next = l;
    
        return l;
    }
    
    void yuesefu(node *l, int p)
    {
        node *m, *n;
        m = n = l;
        int a = 1, data = l->data;
        while (m->next != m)
        {
            if (a == p)
            {
                printf("%d ", m->data);
                n->next = m->next;
                if (m->data == data) //重置头结点
                {
                    l = m->next;
                    data = l->data;
                }
                free(m);
                m = n->next;
                a = 1;
            }
            else
            {
                a++;
                n = m;
                m = m->next;
            }
        }
    }
    
    
    int main()
    {
        int n, p;
        scanf("%d%d", &n, &p);
        node *l = Creatlist(n);
        // l = tou();
        // Creatlist(l, n);
        yuesefu(l, p);
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动