1 条题解

  • 0
    @ 2025-9-16 1:04:08

    核心逻辑

    解决分糖果问题需遵循“依次操作、邻部分配”规则,关键步骤如下:

    1. 初始化数据:用数组存储5个小朋友的初始糖果数(编号1-5,围成圆桌,1号邻5号和2号,5号邻4号和1号)。
    2. 分糖果操作(按1-5号顺序)
      • 每个小朋友将当前糖果数 整除3(多余糖果吃掉,取商为div3);
      • 自己留div3颗糖果,剩余两份(各div3颗)分别分给 左右相邻 的小朋友(处理边界:1号左邻5号,5号右邻1号)。
    3. 格式化输出:一轮操作后,按每个数占5个字符宽度(右对齐)输出结果。

    代码实现

    C

    #include <stdio.h>
    
    int main() {
        int candy[6];  // 索引1-5对应1-5号小朋友,索引0不用
        // 读取5个小朋友的初始糖果数
        for (int i = 1; i <= 5; i++) {
            scanf("%d", &candy[i]);
        }
        
        // 按1-5号顺序分糖果
        for (int i = 1; i <= 5; i++) {
            int div3 = candy[i] / 3;  // 均分3份,多余吃掉(整数除法自动取商)
            candy[i] = div3;          // 自己留1份
            
            // 确定左右邻居(边界处理)
            int left = (i == 1) ? 5 : i - 1;  // 1号左邻5号,其他左邻i-1
            int right = (i == 5) ? 1 : i + 1; // 5号右邻1号,其他右邻i+1
            
            candy[left] += div3;   // 左邻分1份
            candy[right] += div3;  // 右邻分1份
        }
        
        // 按5位宽度输出结果
        for (int i = 1; i <= 5; i++) {
            printf("%5d", candy[i]);
        }
        printf("\n");
        return 0;
    }
    

    C++

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int candy[6];  // 索引1-5对应1-5号
        for (int i = 1; i <= 5; i++) {
            cin >> candy[i];
        }
        
        for (int i = 1; i <= 5; i++) {
            int div3 = candy[i] / 3;
            candy[i] = div3;
            
            int left = (i == 1) ? 5 : i - 1;
            int right = (i == 5) ? 1 : i + 1;
            
            candy[left] += div3;
            candy[right] += div3;
        }
        
        // setw(5)控制宽度为5,默认右对齐
        for (int i = 1; i <= 5; i++) {
            cout << setw(5) << candy[i];
        }
        cout << endl;
        return 0;
    }
    

    Python

    # 初始化数组:索引1-5对应1-5号,输入按顺序存入
    candy = [0] + list(map(int, input().split()))  # candy[0]不用
    
    # 依次处理1-5号小朋友
    for i in range(1, 6):
        div3 = candy[i] // 3  # 整除3,多余吃掉
        candy[i] = div3       # 自己留1份
        
        # 确定左右邻居
        left = 5 if i == 1 else i - 1
        right = 1 if i == 5 else i + 1
        
        candy[left] += div3
        candy[right] += div3
    
    # 按5位宽度输出(切片candy[1:]取1-5号数据)
    print(''.join(f'{x:5d}' for x in candy[1:]))
    

    验证(样例输入8 9 10 11 12

    1. 处理1号:8//3=2 → 1号留2,5号+2(12→14),2号+2(9→11);
    2. 处理2号:11//3=3 → 2号留3,1号+3(2→5),3号+3(10→13);
    3. 处理3号:13//3=4 → 3号留4,2号+4(3→7),4号+4(11→15);
    4. 处理4号:15//3=5 → 4号留5,3号+5(4→9),5号+5(14→19);
    5. 处理5号:19//3=6 → 5号留6,4号+6(5→11),1号+6(5→11);
      最终结果:11 7 9 11 6,按5位宽度输出为 11 7 9 11 6,与样例一致。
    • 1

    信息

    ID
    452
    时间
    1000ms
    内存
    64MiB
    难度
    7
    标签
    递交数
    31
    已通过
    8
    上传者