📄 ysf.c
字号:
/***========[约瑟夫问题]========***/
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}LNode;
int n,m,nums,v,i,j;
int k[30];
LNode* GetNode(LNode*);
int Print(LNode*,int );
LNode* Create(int);
main()
{
LNode *p;
puts("请输入人数n(n<=30)和报数上限m :");
scanf("%d%d",&n,&m);
puts("请输入各个密码nums:");
for(i=0;i<n;++i)
{scanf("%d",&nums);
k[i]=nums;}
p=Create(n);
Print(p,m);
}
LNode* Create(int n ) /*循环函数*/
{ LNode *p,*head,*q;
head=( LNode*)malloc(sizeof( LNode));
head->data=1;
p=head;
q=head;
for(i=2;i<=n;i++)
{
head=( LNode*)malloc(sizeof( LNode));
head->data=i;
p->next=head;
p=head;
p->next=NULL;
}
p->next=q;
p=p->next;
}
LNode* GetNode(LNode* p) /*初始化函数*/
{ LNode *q;
while (q->next!=p)
q=q->next;
q->next=p->next;
free(p);
return(q->next);
}
int Print(LNode* p,int m ) /*输出函数*/
{
printf("出队编号为:");
while(p->next!=p)
{for(i=1;i<=m-1;i++)
{
p=p->next;
}
v=p->data;
printf("%d ",p->data);
m=k[v-1];
p= GetNode(p);
}
printf("%d ",p->data);
puts ("结束!!");
getch();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -