1 条题解

  • 0
    @ 2025-11-29 12:35:43

    C :

    #include<stdio.h>
     
    /**
     * 判断椰子数量能否按照规则进行分割
     * @param n 人数
     * @param total 椰子树
     * @param times 分割次数,有几个人就分割几次
     * @return 能分割返回1,不能分割返回0
     */
    int divide(int n, int total, int times) {
        // 当第n+1次分割时,已经分割完n次了,椰子数满足分割条件返回1,即递归出口
        if (times > n) {
            return 1;
        }
        // 椰子可以分割的条件是,当前次可以分割,并且以后的分割都可以进行
        // 前次可以分割的条件是,椰子数量total-1后能被分成n份即((total - 1) % n) == 0
        // 以后的分割可不可以进行,可以看做是第一个人藏完椰子后,椰子的数量,能否进行分割,即分成更小的问题规模
        return !((total - 1) % n) && divide(n, (total - 1) / n * (n - 1), ++times);
       
    }
     
    int main() {
        int n;
        scanf("%d", &n);
        if (n <=1 || n > 5) {
            printf("Error!\n");
            return 0;
        }
        // 暴力枚举,哪个能按照要求分割,哪个就合理。找到第一个就行
        int total = n+1;
        while (1) {
            if (divide(n, total, 1)) {
                printf("y=%d\n", total);
                break;
            }
            total++;
        }
    }
    
    • 1

    信息

    ID
    116
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者