码迷,mamicode.com
首页 > 其他好文 > 详细

约瑟夫环问题

时间:2014-10-11 16:33:15      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:io   ar   sp   art   问题   ad   ef   bs   size   

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

/**
约瑟夫环
编号为1,2,3……,n的n个人按顺时针方向围坐一圈,每个人手中持有一个密码。
开始任选一个报数上限正整数m,从第一个人开始按顺时针方向自1开始报数,
报道m停止。报m的人出列,将手中的密码作为新m,从他下一个人从1开始重新数
数,循环,求最后剩下那个人的最初编号
**/
typedef struct Node{

 int pwd;
 struct Node *next;
}Node;


void exploer(Node * head, int num){

 if( head == NULL || head->next==NULL){ return ;}  
 while(1){

  while(num >0){

   if(head->next==head){ printf("exit\n");return ;}  
   num--;
   if(num==0){

    num = head->next->pwd;
    printf("pwd is :%d\n",num);
    head->next=head->next->next;

   }

   

  }

 }


}

int main(){


 int i=0,a=1,b=10;
   
        int pwd = (rand() % (b-a+1))+ a;

 Node *node = (Node *)malloc(sizeof(Node)*1);
 Node *head = node;
 Node *tmp =  NULL;
 node->pwd = pwd;
 printf(" start pwd is :%d\n",pwd);
 node->next= NULL;
 while( (i++) < 20){
  
         pwd = (rand() % (b-a+1))+ a;
  tmp = (Node*)malloc(sizeof(Node));
  tmp->pwd=pwd;
  tmp->next=NULL;
  node->next=tmp;
  node=tmp; 
  printf(" create pwd is :%d\n",pwd);

 } 
 node->next=head;
 exploer(head,1);


}

约瑟夫环问题

标签:io   ar   sp   art   问题   ad   ef   bs   size   

原文地址:http://my.oschina.net/u/1388024/blog/326755

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!