您的位置:首页 > 编程语言 > C语言/C++

约瑟夫环(c语言程序完整版)

2016-06-23 12:16 288 查看
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct Node
{
int num;
struct Node *next;
}LinkList;

LinkList *creat(int n)
{
int i = 1;

LinkList *p,*q,*head;
p = (LinkList*)malloc(sizeof(LinkList));
p->num = i;
head = p;
for(i = 2;i<=n;i++)
{
q = (LinkList*)malloc(sizeof(LinkList));
q->num = i;
p->next = q;
p = q;

//p->next = head;

}
p->next = head;

return head;

}

void fun(LinkList *L,int k,int m)
{
int i,j;
LinkList *p,*q,*s;
p = L;
for(i = 1;i<k;i++)
{

q = p;
p = p->next;
}
while(p->next!=p)
{
for(j = 1;j<m;j++)
{
q=p;
p = p->next;
}
printf("%5d",p->num);
s = p;
q->next = p->next;
p = p->next;
free(s);

}

printf("%5d",p->num);
}

void main()
{
LinkList *L;
int n,k,m;
n = 9;
m = 4;
k = 2;
L=creat(n);
fun(L,k,m);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: