约瑟夫环问题
来源:互联网 发布:大学生网络课程应用 编辑:程序博客网 时间:2024/05/16 06:51
/*此方法是利用循环链表#include <iostream>using namespace std;typedef struct _Node{int element;_Node * next;}Node;//约瑟夫问题-n(1, 2,...n)个人,从第k个报数,报数到m的那个人出列,//他的下一个人从1开始报数,报数到m的那个出列,以此类推void Josephus(int n, int k, int m){//根据n创建循环链表Node * head = (Node *)malloc(sizeof(Node)); //头结点head->next = NULL;int i;Node * p = head;Node * pTemp = NULL; for (i = 0; i < n; i++) {pTemp = (Node *)malloc(sizeof(Node));pTemp->element = i + 1; //编号从1开始pTemp->next = NULL;p->next = pTemp;p = pTemp; }p->next = head->next; //链表最后一个结点指向第一个节点//找到编号为k的节点p = head->next;Node * pre = head;while (p != NULL){if (p->element == k){break;}pre = p;p = p->next;}//按规则输出for (i = 0; i < n; i++) //总共n个结点,需循环n次{for (int j = 0; j < m - 1;j++) //从指针指向的那个节点开始报数,报数到m,所以循环m-1次{pre = p;p = p->next;}cout << p->element << " ";pre->next = p->next;free(p);p = pre->next;}free(head); //释放头结点}int main(){Josephus(8,1,4);return 0;}*///接下来是基础的C代码#include<stdio.h>#include<stdlib.h>int main(){int i,j,n,m,*p;scanf("%d%d",&n,&m);p=(int *)malloc(n*sizeof(int));for(i=0;i<n;i++)p[i]=i+1;i=0;while(n>1){i=(i+m-1)%n;printf("%-4d",p[i]);for(j=i+1;j<n;j++)p[j-1]=p[j];n--;if(i==n)i=0;}printf("\n%d\n",p[0]);free(p);return 0;}
0 0
- 约瑟夫问题、约瑟夫环
- Josephus约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题(Josephus)
- 约瑟夫环问题--java
- 约瑟夫环问题 Josephus
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 求解约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- 约瑟夫环问题
- oracle 12c之jdbc连接可拔插数据库pdb的问题
- Encoding编码(1020)
- Vbs脚本经典教材
- 一休电影网abcde
- 一休电影网abcde
- 约瑟夫环问题
- Hadoop 之 Wordcount 单词计数 (学习笔记)
- 普通java程序读取资源文件
- Box2D例子——Hello Box2D
- DOS命令的英文全称
- CF282 E Sausage Maximization[trie树]
- HDP2.0.6+hadoop2.2.0+eclipse(windows和linux下)调试环境搭建
- android - broadcast
- Codeforces #264 div.2 D. Gargari and Permutations