文章

1

粉丝

0

获赞

0

访问

96

头像
约瑟夫问题的实现 题解:C语言实现
P5104
发布于2025年4月7日 11:04
阅读数 96


#include "stdio.h"
#include "stdlib.h"

int main() {
    int n, k;
    scanf("%d %d", &n, &k);
    int flag1 = 0;//用于数k
    int flag2 = 0;//用于数出列了几个
    int *arr = calloc(n, sizeof(int)); // 自动初始化为0
    int i = 0;
    while (flag2 < n - 1) { // 循环到剩最后一人
        if (arr[i] == 0) {
            flag1++;
            if (flag1 == k) {
                arr[i] = 1;     // 标记出圈
                flag1 = 0;      // 重置计数器
                flag2++;        // 出圈人数+1
            }
        }
        i = (i + 1) % n;       // 环形遍历
    }
    // 找到最后未出圈的人
    for (i = 0; i < n; i++) {
        if (arr[i] == 0) {
            printf("%d", i + 1); // 输出实际编号
            break;
        }
    }
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发