首页 > 其他 > 详细

6-7 约瑟夫环之循环链表 (10分)

时间:2020-10-27 13:52:27      阅读:155      评论:0      收藏:0      [点我收藏+]

题目:

  n个人围成一圈(编号依次为:0,1,2...n-1),从第一个人开始报数,1,2,……数到m者出列,再从下一个开始重新报数,数到m者再出列……。 下面的程序中,用不带附加表头的循环单链表来模拟约瑟夫环,且只设指向最后一个元素的尾指针。算法的思想是,第一步,先将每个人的编号追加到一个通过尾指针标识的循环单链表中。第二步,从首元素开始计数,数到m的取下这个元素,并追加到另一个用尾指针标识的循环单链表中……直到全部元素都取下。第三步,输出最后建立的循环单链表。请编写函数,完成第三步工作:输出通过尾指针标识的循环单链的全部元素。

 

函数接口说明:

 

void show(struct Node *r);//show data

 

其中r是指针,指向无附加表头的循环单链表的最后一个结点

裁判程序样例:

#include <stdio.h>
#include <stdlib.h>
struct Node{
	int data;
	struct Node *next;
};
void show(struct Node *r);//show data    需要完成的函数

int main(){
	int n,m;scanf("%d%d",&n,&m);
	struct Node *p=fun(n,m));//创建按出列顺序排列的循环单链表,返回指向尾元素的指针:测试程序提供
	show(p);//调用显示函数显示数据   该函数需要编程完成
	return 0;
}
/* 请在这里填写答案 */

输入样例:

9 4

输出样例:

[]
[3,7,2,8,5,4,6,1,0]


我好气!
题目明明只说了 输出 而且分析程序来看明明show函数也只会运行一次 为什么就段错误啊!
明明只是个简简单单的循环链表输出 非要让我们猜题意

还好pta现在有自定义样例测试了...不然我一辈子都de不出来bug
原因是这样的 我的代码一直段错误 直到我尝试只输出一个‘?’却发现他给我输出了两个问号

震惊猫猫.jpg

输出r -> data段错误 说明r可能是空的
所以...我用了这样一个神奇的东西
void show(struct Node *r)
{
    if (r)
    {
       printf("?");
    }
    else
    {
        printf("!");
    }
}
“输出结果:!?”
!果然!
第一次的程序 循环链表是个空的 完全是空的 第二次再运行的时候才会有链表 如果直接输出的话才能正常运行

浪费了我一个小时的奇怪的题目增加了.jpg
void show(struct Node *r)
{
    if (r)
    {
        struct Node *p;
        p  = r -> next;
        int fir = 0;
        printf("[");
        while(p != r -> next || fir == 0)
        {
            if (!fir)
            {
                fir = 1;
                printf("%d",p -> data);
            }
            else
            {
                printf(",%d", p -> data);
            }
            p = p -> next;
        }
        printf("]");
    }
    else
    {
        printf("[]\n");
    }
}

好气呀好气呀.png

 

 

6-7 约瑟夫环之循环链表 (10分)

原文:https://www.cnblogs.com/moonjumper/p/13884176.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!