没人回复?我来分享下,代码可读性比较差,谅解。
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- // 定义数组表示15人
- int p[15] = {0};
-
- // 全部初始化为1,表示都在圈内
- for (int k = 0; k < 15; k++) {
- p[k] = 1;
- }
-
- // count表示还在圈内的人数,i表示角标,j表示报号
- int count = 15, i = 0, j = 1;
-
- // 人数只剩1个时跳出循环
- while (count != 1) {
-
- // 角标大于等于15时回到0
- if (i >= 15) {
- i = 0;
- }
-
- // 报号4时回到1
- if (j == 4) {
- j = 1;
- }
-
- // 0表示已经不在圈内,换下一个人
- if (p[i] == 0) {
- i++;
- continue;
- }
-
- // 报号为3的退出圈内,人数也-1
- if (j == 3) {
- p[i] = 0;
- count--;
- }
-
- // 换下一个人报号,报号+1
- j++;
- i++;
-
- }
-
- // 找出最后留在圈内的人的角标
- for (int k = 0; k < 15; k++) {
- if (p[k] == 1) {
- printf("k = %d\n", k);
- break;
- }
- }
-
- return 0;
- }
复制代码 |