1298150336 发表于 2020-5-26 16:36:28

求助关于约瑟夫问题

下面这段代码是我根据小甲鱼视频中一样打的,可为什么这段代码在vc++中每次运行就弹出中止框,用devc++运行可以,求解释。十分感谢。



//Josephus问题
#include<stdio.h>
#include<stdlib.h>

typedef struct Node *PtrToNode;
struct Node{
        int data;
        struct Node *next;
};
typedef PtrToNode List;



List CreatList(int N);
List CreatList(int N)//创建单向循环链表
{
        List p=(PtrToNode)malloc(sizeof(List));
        List head=p;
       
        int i=1;
        List s;


        if(N!=0)
        {
                while(i<=N)
                {
                  s=(PtrToNode)malloc(sizeof(List));
                        s->data=i;
                        p->next=s;
                        p=s;
                        i++;
                }
                s->next=head->next;
        }
        else
                printf("未知错误!\n");


        free(head);
        return s->next;
}

int main()
{
        int M,N;
        printf("请输入M的值:");
        scanf("%d",&M);
        printf("请输入N的值:");
        scanf("%d",&N);

        if((M==0)||(N==0))
        {
                printf("未知错误!\n");
                return NULL;
        }

        List p=CreatList(N);
        List Temp;

        while(p!=p->next)
        {
                for(int i=1;i<M-1;i++)
                        p=p->next;
                printf("%d->",p->next->data);
                Temp=p->next;
                p->next=Temp->next;

                free(Temp);
                p=p->next;
        }
        printf("%d\n",p->data);
        return 0;
}



       

aaron.yang 发表于 2020-5-26 18:45:44

发题目

1298150336 发表于 2020-5-26 19:33:48

aaron.yang 发表于 2020-5-26 18:45
发题目

Josephus问题是下面的小游戏:N个人从1~N编号,围坐成一个圆圈。从1号开始传递一个热土豆。经过M次传递后拿着热土豆的人被清除离开,围坐的圆圈缩紧,由坐在被清除的人后面的人拿起热土豆继续进行游戏。最后剩下的人获胜。

1298150336 发表于 2020-5-26 19:35:27

aaron.yang 发表于 2020-5-26 18:45
发题目

我想问一下为什么在vc++上这段代码就运行不了
页: [1]
查看完整版本: 求助关于约瑟夫问题