约瑟夫环的三种实现方式
来源:互联网 发布:知乎客户端 编辑:程序博客网 时间:2024/05/14 15:34
链表实现
#include <stdio.h>#include <stdlib.h>typedef struct Node{int data;struct Node *next;}Node;Node *CreatList(int n) //创建一个含n个人的循环链表{int i;Node *head,*p,*q;head=(Node*)malloc(sizeof(Node)); head->data=1;p=head;for(i=2;i<=n;i++) //利用尾插法构建长度为n的链表{q=(Node*)malloc(sizeof(Node));p->next=q;q->data=i;p=p->next;}p->next=head; //构建循环链表return(head);}void Joseph(Node *head,int n,int m) //n:总人数 m:出列的数字{int i,j;Node *p,*q; p=head;for (j=1;j<=n;j++) { for(i=1;i<m;i++)p=p->next; //找到应出列的人printf("% d",p->data);p->data=p->next->data;q=p->next;p->next=p->next->next;free(q); //释放指针q所指变量的存储空间}}int main(){int n,m;Node *head;printf("请输入总人数n: ");scanf("%d",&n);printf("\n请输入出列者报的数m: ");scanf("%d",&m);printf("\n");head=CreatList(n); //调用创建列表函数Joseph(head,n,m); //调用约瑟夫环函数printf("\n");printf("\n");}
#include<stdio.h>#include<stdlib.h>#define Maxsize 100typedef struct{ int data[Maxsize]; int length;}SqList;void GreateList(SqList *&L,int n){int i;L=(SqList *)malloc(sizeof(SqList));for(i=0;i<n;i++)L->data[i]=i+1;L->length=n;}void DisplayList(SqList *L,int m){int i, j;int k=0;for (i=L->length; i>0; i--){k=(k+m-1)%i;printf("%d ",L->data[k]);for (j=k;j<i-1; j++)L->data[j]=L->data[j+1];L->length=L->length-1;}printf("\n");}void DestroyList(SqList *&L){free(L);}int main() { int n,m; SqList *L;//此处为定义一个结点指针 printf("请输入人数n和初始值m:\n"); scanf("%d%d",&n,&m); GreateList(L,n); DisplayList(L,m);//此处不需要引用符号 DestroyList(L); return 0;}
#include "stdio.h" #include "stdlib.h"#define MAXSIZE 100 struct node{int number;int next;}string[MAXSIZE];int josephus(void){int total;int out;int start;int i,j;int flag=0;int current,front;printf("请输入人数(正整数):");scanf("%d",&total);printf("请输入报数(正整数):");scanf("%d",&out);printf("从第几个人开始报数:\n");scanf("%d",&start); if(out==1)return total;for(i=0;i<total;i++)//初始化 { string[i].number=i+1;string[i].next=i+1;}string[i-1].next=0;front=total-1;current=0;for(i=1;i<start;i++){front=string[front].next;current=string[current].next;}while(flag<total){if(j%out==0){string[front].next=string[current].next;current=string[front].next;j=1;flag++;}else{j++;front=string[front].next;current=string[current].next;}}return(string[current].number);}main(){int t;t=josephus();printf("留下第%d个人\n", t);return 0; }
0 0
- 约瑟夫环的三种实现方式
- 约瑟夫环的三种实现
- 约瑟夫环的数组实现方式
- 约瑟夫环的三种解法
- 猴子选大王(约瑟夫环另外的实现方式)
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的实现
- 【苦练基本功1】三种方法实现约瑟夫环问题
- 约瑟夫环的2种实现
- 约瑟夫环的两种实现
- 约瑟夫环的两种实现
- 约瑟夫问题 三种实现方法
- 约瑟夫环的编程实现
- window.XMLHttpRequest
- 【BZOJ 3676】 [Apio2014]回文串 回文树
- 有向图的拓扑排序
- 利用Android Camera2 的照相机api 实现 实时的图像采集与预览
- php安装composer
- 约瑟夫环的三种实现方式
- 偏向锁,轻量级锁与重量级锁的区别与膨胀
- 基于How To Tango With Django 1.9的重新实践(14)——Bing Search
- 关于京东首页的例子
- static 静态变量
- Linux下安装Nginx完整教程及常见错误解决方案
- 动作游戏Demo(一)换装系统
- 2015蓝桥杯B组第三题(三羊献瑞)
- Exar推出AEC-Q100标准系列40V PoL稳压器XR76205系列