
数据结构约瑟夫环的问题.....
/*Note:YourchoiceisCIDE*/#include<stdio.h>#definemaxlen100#definedatatypeinttypedefst...
/* Note:Your choice is C IDE */
#include <stdio.h>
#define maxlen 100
#define datatype int
typedef struct
{
datatype data[maxlen];
int last;
}seqlist;
main()
{
seqlist m;
int a,b,c,d,i;
printf("多少个数?");
scanf("%d",&a);
for(b=0;b<a;b++)
m.data[b]=b+1;
m.last=a-1;
printf("从哪个人开始??");
scanf("%d",&c);
getchar();
printf("数几个?");
scanf("%d",&d);
getchar();
c=c-1;
while(m.last!=-1)
{c=c+d-1;
c=c%(m.last+1);
printf("这个数字是:%d\n",m.data[c]);
for(i=c;i<m.last;i++)
m.data[c]=m.data[c+1];
m.last--;
}
}
帮我找到错误并改正!!
并写一个最简洁的! 展开
#include <stdio.h>
#define maxlen 100
#define datatype int
typedef struct
{
datatype data[maxlen];
int last;
}seqlist;
main()
{
seqlist m;
int a,b,c,d,i;
printf("多少个数?");
scanf("%d",&a);
for(b=0;b<a;b++)
m.data[b]=b+1;
m.last=a-1;
printf("从哪个人开始??");
scanf("%d",&c);
getchar();
printf("数几个?");
scanf("%d",&d);
getchar();
c=c-1;
while(m.last!=-1)
{c=c+d-1;
c=c%(m.last+1);
printf("这个数字是:%d\n",m.data[c]);
for(i=c;i<m.last;i++)
m.data[c]=m.data[c+1];
m.last--;
}
}
帮我找到错误并改正!!
并写一个最简洁的! 展开
1个回答
展开全部
我个人觉得用数组做不方便,还是链表好。我编了个循环链表做的约瑟夫环,可以给你参考参考。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int key;//每个人持有的密码
int num;//这个人的编号
struct Node *next;//指向下一个节点
}Node,*Link;
//=================================
void InitList(Link &L) //创建一个空的链表
{
L=(Node *)malloc(sizeof(Node));
if(!L) exit(1);
L->key=0;
L->num=0;
L->next=L;
}
void Creater(int n,Link &L) //初始化链表
{
Link p,q;
q=L;
for(int i=1;i<=n;i++)
{
p=(Node *)malloc(sizeof(Node));
if(!p) exit(1);
scanf("%d",&p->key);
p->num=i;
L->next=p;
L=p;
}
L->next=q->next;
free(q);
}
void main()
{
Link L,p,q;
int n,x;
L=NULL;
InitList(L);//构造出一个只有头结点的空链表
printf("please input the totle number of people:");
scanf("%d",&n);//总共的人数n
printf("the first key is:");
scanf("%d",&x);//初始密码为x
Creater(n,L);//建立好一个约瑟夫环
p=L;
for(int i=1;i<=n;i++)
{
for(int j=1;j<x;j++)
p=p->next;
q=p->next;
x=q->key;
printf("%d ",q->num);
p->next=q->next;
free(q);
}
}
//输入次序依次为总共的人数n,初始密码x,再输入n个人各自拥有的密码;
//程序我自己可以成功运行,如果你运行不成,可以看看是否是中英文的问题
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int key;//每个人持有的密码
int num;//这个人的编号
struct Node *next;//指向下一个节点
}Node,*Link;
//=================================
void InitList(Link &L) //创建一个空的链表
{
L=(Node *)malloc(sizeof(Node));
if(!L) exit(1);
L->key=0;
L->num=0;
L->next=L;
}
void Creater(int n,Link &L) //初始化链表
{
Link p,q;
q=L;
for(int i=1;i<=n;i++)
{
p=(Node *)malloc(sizeof(Node));
if(!p) exit(1);
scanf("%d",&p->key);
p->num=i;
L->next=p;
L=p;
}
L->next=q->next;
free(q);
}
void main()
{
Link L,p,q;
int n,x;
L=NULL;
InitList(L);//构造出一个只有头结点的空链表
printf("please input the totle number of people:");
scanf("%d",&n);//总共的人数n
printf("the first key is:");
scanf("%d",&x);//初始密码为x
Creater(n,L);//建立好一个约瑟夫环
p=L;
for(int i=1;i<=n;i++)
{
for(int j=1;j<x;j++)
p=p->next;
q=p->next;
x=q->key;
printf("%d ",q->num);
p->next=q->next;
free(q);
}
}
//输入次序依次为总共的人数n,初始密码x,再输入n个人各自拥有的密码;
//程序我自己可以成功运行,如果你运行不成,可以看看是否是中英文的问题
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询