小程序(十一)约瑟夫环的问题

来源:互联网 发布:nba淘宝官方旗舰店 编辑:程序博客网 时间:2024/05/18 00:51

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


#include<stdio.h>#include<stdlib.h>typedef struct node{int num;struct node *next;}node,*Linklist;void create(Linklist &L,int n){   int i;   Linklist p,s;   p = (Linklist)malloc(sizeof(node));   p->num = 1;   L = p;      for(i=2;i<=n;i++)   {     s = (Linklist)malloc(sizeof(node)); s->num = i; p->next = s; p = s;   }   p->next = L;}void yushefu(Linklist &L,int m,int n,int k){  Linklist p ,s,q;  p = L;  int i = m+k-1;  int j;  while(p->next != p)  {      j=1;  while(j<i) {    q = p;   p = p->next;   j++; } printf("%d\n",p->num);     s = p; q->next = p->next; p = p->next; free(s); i = m;  }  printf("%d\n",p->num);}int main(){ Linklist L; int m,n,k; n = 9; m = 8; k = 5; L = (Linklist)malloc(sizeof(node)); create(L,n); yushefu(L,m,n,k); return 0;}


原创粉丝点击