主题:约瑟夫环问题--看看了好几次,还是不知道错在那,高手帮忙之
我的程序是在vc环境下运行的,如输入10 ,3,本应输出
3,6,9,2,7,1,8,5,10,4,却只输出3,还弹出错
误窗口,请高手帮忙看一下,改一改,谢个先!
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
typedef int DataType;
typedef struct LNode
{
DataType data;
struct LNode *next;
}LinkList;
LinkList *CreatList(int n)
{ //建立一个不带头结点的环形单链表,并返回表头指针
LinkList *head=NULL;
LinkList *p,*q; //p指向新生的节点,q始终指向当前链表的尾节点
int i;
if(n>0)
{
p=(LinkList *)malloc(sizeof(LinkList));
head=p;
for(i=1;i<=n;i++)
{
p->data=i;
q=(LinkList *)malloc(sizeof(LinkList));
q->data=NULL;
p->next=q;
p=q;
}
}
return (head);
}
void josephus(int n,int k)
{
LinkList *p,*q;
int i=0,j;
p=CreatList(n); //创建环形链表p 指向数据域为1的节点
q=p; //q指向数据域为1的前驱节点
while (i<n)
{
for(j=1;j<k;j++)
p=p->next; //p指向待输出的前驱节点;
q=p; //q指向带输出的节点;
printf("%d\t\n",q->data);
p->next=q->next;
free(q);
i++;
}
}
int main(int argc, char* argv[])
{
int n,k;
printf("Please Enter The Number N And K:");
scanf("%d%d",&n,&k);
josephus(n,k);
return 0;
}
3,6,9,2,7,1,8,5,10,4,却只输出3,还弹出错
误窗口,请高手帮忙看一下,改一改,谢个先!
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
typedef int DataType;
typedef struct LNode
{
DataType data;
struct LNode *next;
}LinkList;
LinkList *CreatList(int n)
{ //建立一个不带头结点的环形单链表,并返回表头指针
LinkList *head=NULL;
LinkList *p,*q; //p指向新生的节点,q始终指向当前链表的尾节点
int i;
if(n>0)
{
p=(LinkList *)malloc(sizeof(LinkList));
head=p;
for(i=1;i<=n;i++)
{
p->data=i;
q=(LinkList *)malloc(sizeof(LinkList));
q->data=NULL;
p->next=q;
p=q;
}
}
return (head);
}
void josephus(int n,int k)
{
LinkList *p,*q;
int i=0,j;
p=CreatList(n); //创建环形链表p 指向数据域为1的节点
q=p; //q指向数据域为1的前驱节点
while (i<n)
{
for(j=1;j<k;j++)
p=p->next; //p指向待输出的前驱节点;
q=p; //q指向带输出的节点;
printf("%d\t\n",q->data);
p->next=q->next;
free(q);
i++;
}
}
int main(int argc, char* argv[])
{
int n,k;
printf("Please Enter The Number N And K:");
scanf("%d%d",&n,&k);
josephus(n,k);
return 0;
}