- #include <stdio.h>
- #define M 15 //M表示人数,N表示报号退出的数字
- #define N 3
- int main()
- {
- int str[M];
- for(int a = 0;a<M;a++) //for循环赋值
- {
- str[a]=a+1;
- }
-
- int number = M,count = 0,i =0;
- while (number > 1) //直到只剩一人退出循环
- {
- if (str[i] != 0) count++;
-
- if (count == 3) {
- str[i] = 0;//退出圈子的人数值改为0
- count = 0;//count重新赋值为0,重新报号
- number--;//人数减1
- }
- i++;
- if (i == M) i = 0; //M人报号一遍后重新报号
-
- }
-
- for (int i = 0; i< 13; i ++)
- {
- if (str[i] > 0) printf("出卖耶稣叛徒的序号为:%d\n",str[i]);
-
- }
- return 0;
-
- }
复制代码
约瑟夫环的问题。如果采用模拟环依次的方法,重点是如何开始新的一圈循环,代码的靠后部分 if (i == M) i = 0;使得报号一遍后重新报号。约瑟夫环的问题,还可以采用递归公式,代码简洁,需要能够推到公式。下面是模拟的方法。 |