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

约瑟夫环

时间:2015-05-25 09:53:19      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:

约瑟夫环运作如下:
1、一群人围在一起坐成环状
2、从某个编号开始报数
3、数到某个数的时候,此人出列,下一个人重新报数
4、一直循环,直到所有人出列,约瑟夫环结束
 
比较简单  不再赘述 直接看代码吧
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define N 41            //总人数 
 4 #define M 3                //报到3死 
 5 int main()
 6 {
 7     int man[N+1]={0};
 8     int count=1;
 9     int i=0,pos=-1;
10     int alive=0;
11     while(count<=N)
12     {
13         while(1)
14         {
15             pos=(pos+1)%N;            //约瑟夫环序列  
16             if(man[pos]==0)            //若为0则说明这个位置还有人,则继续累加 
17                 i++;
18             if(i==M)                //若到M 则重新开始累加 并跳出当前循环 
19             {
20                 i=0;
21                 break;
22             }    
23         }
24         man[pos]=count;                //设当前这个位置 为死的次序 
25         count++;
26     }
27     printf("\n最初位置-约瑟夫环位置\n");
28     for(i=0;i<N;i++)
29     {
30         printf("%d-%d ",i+1,man[i]);
31         if(i!=0&&i%10==0)
32             printf("\n");
33     }    
34     
35     printf("\n\n准备剩下的人数\n");
36     scanf("%d",&alive);
37     alive=N-alive;
38     for(i=0;i<N;i++)
39         if(man[i]>alive)
40             printf("初始序列%d,约瑟夫环序列%d\n",i+1,man[i]);
41     return 0;
42 }

 

约瑟夫环

标签:

原文地址:http://www.cnblogs.com/threezj/p/4527100.html

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