本帖最后由 jiangenhao 于 2014-4-24 22:54 编辑
- int people[15];
- int pos, peopleNum = 15, step = 0;//peopleNum记录还剩下的人数
-
- for (int i = 1; i <=15; i++)
- {
- people[i-1] = i;
- }
- pos = 0;
-
- while(peopleNum != 1)
- {
-
- if (people[pos])
- {
- step++;//不是零,就报数
- }
- printf("%d\n",people[pos]);
- if (people[pos] && step == 3)
- {
- people[pos] = 0;//当报数到3的时候,就把这个元素置成0
- peopleNum--;//走一个人,减一次
- }
-
-
- pos++;
- if (pos == 15)
- {
- pos = 0;//为了转圈下去
- }
- if (step == 3)
- {
- step = 0;//为了报数的重新计算
- }
- }
- for (int i = 0; i < 15; i++)
- {
- printf("%d\n",people[i]);
- }
-
复制代码
把人删除比较费劲,所以我们把出局的人标记成0
关键在于数到15后 要重新接到1
数到3要接着数1把这两点想清楚就简单多了
希望能帮到你
|