Josephus约瑟夫环问题
来源:互联网 发布:linux如何建立软链接 编辑:程序博客网 时间:2024/04/28 22:46
求解Josephus问题:设有n个数构成一个环链,现从第k个数开始数数,数到m的那个数被弹出,然后从该数的下一个数重新开始数数,数到m的那个数又被弹出,如此重复,直到所有的数均被弹出为止。输出这些数弹出的序列。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct Node {
int no;
int m;
struct Node *next;
} Node, *LinkList;
LinkList Creat(int m, int n, int mm[])
{
LinkList L;
int i;
Node *r,*s;
L=(LinkList)malloc(sizeof(Node));
r=L;
for (i=0; i<n; i++)
{
s=(Node *)malloc(sizeof(Node));
if (s==NULL)
{
printf("错误:内存不足!/n");
return NULL;
}
s->no=i+1;
s->m=mm[i];
r->next=s;
r=s;
}
L->no=0;
L->m=0;
r->next=L;
return L;
}
void Josephus(LinkList L, int m, int n)
{
int i,j,nn=n;
Node *p,*q;
p=L;
for (i=0;i<n;i++)
{
if (m<2) m=m+nn;
for (j=0;j<m-2;j++)
{
if (p->no==0) p=p->next;
p=p->next;
}
q=p->next;
if (q->no==0) q=q->next;
m=q->m;
printf("%4d",q->no);
p->next=q->next;
free(q);
nn--;
p=p->next;
}
}
main()
{
int m,n,i,mm[MAXSIZE]/*={3,1,7,2,4,8,4}*/;
int ch=0, c;
LinkList L;
/* m=20;n=7;
Only For Test*/
printf("输入m:");scanf("%d",&m);
printf("输入n:");scanf("%d",&n);
printf("输入密码:");
for (i=0;i<n;i++)
scanf("%d",&mm[i]);
L=Creat(m,n,mm);
printf("得到序列如下:/n");
Josephus(L,m,n);
printf("/n");
return 0;
}
- Josephus约瑟夫环问题
- 约瑟夫环问题(Josephus)
- 约瑟夫环问题 Josephus
- Josephus约瑟夫环问题
- 约瑟夫环问题(Josephus)
- Josephus(约瑟夫环)问题
- 约瑟夫环问题(Josephus)
- 约瑟夫环问题(Josephus)
- Josephus问题(约瑟夫环)
- Josephus(约瑟夫环)问题
- [链表]约瑟夫环问题 Josephus
- [算法解决]约瑟夫环问题 Josephus
- 约瑟夫环问题(Josephus)的C解法
- 约瑟夫环问题——Josephus Problem
- 约瑟夫环问题(josephus problem)详解
- 约瑟夫(Josephus problem)环问题初探
- Josephus Problem 约瑟夫环问题的讨论
- 约瑟夫问题(Josephus)
- 关于评审
- CSDN Blog 总出问题,想写的时候都写不了。
- java rss lib 评测
- take me to your heart(中英对照版)
- 旁边的工地开工了
- Josephus约瑟夫环问题
- BAAN系统的产品配置
- 如何制定软件项目测试计划
- 0060 版基本设计目标完成
- 二十年前上厕所的经历
- 刚刚把Blog开通了,怎么也要留下点东西。
- CSDN PB社区中部分FAQ链接地址收集
- 叶子的离开,是因为风的追求,还是树的不挽留?
- 今天正式开始Blog