2401_86531504 2024-11-14 20:39 采纳率: 84.6%
浏览 2
已结题

哪里错了 不知道怎么改 死循环这里怎么办 哪里错了 不知道怎么改 死循环这里怎么办

哪里错了 不知道怎么改 死循环这里怎么办
哪里错了 不知道怎么改 死循环这里怎么办

img

  • 写回答

1条回答 默认 最新

  • 阿白 2024-11-14 21:02
    关注

    变量cnt 重置问题在每次进入循环时cnt被重置为0,这会导致计数错误
    没有处理标记淘汰的逻辑

    img

    #include <stdio.h>
    
    int a[1005];
    
    int main() {
        int n;
    
        while (1) {
            printf("请输入人数 (输入0或负数退出): ");
            scanf("%d", &n);
    
            if (n <= 0) {
                printf("程序结束。\n");
                break;
            }
    
            for (int i = 0; i < n; i++) {
                a[i] = 1;
            }
    
            int cnt = 0;
            int remaining = n;
            int index = 0;
    
            while (remaining > 1) {
                if (a[index] == 1) {
                    cnt++;
                    if (cnt % 3 == 0) {
                        a[index] = 0;
                        remaining--;
                        printf("编号为 %d 的人被淘汰\n", index);
                    }
                }
                index = (index + 1) % n;
            }
    
            for (int i = 0; i < n; i++) {
                if (a[i] == 1) {
                    printf("最后剩下的人是编号为 %d 的人\n", i);
                    break;
                }
            }
        }
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月23日
  • 已采纳回答 11月15日
  • 创建了问题 11月14日