1 条题解

  • 0
    @ 2026-6-19 10:30:49

    📝 题目大意

    给定 NN 个整数 A1ANA_1 \sim A_N,对于每个 ii1iN11 \le i \le N-1),计算 Bi=Ai×Ai+1B_i = A_i \times A_{i+1},并按顺序以空格分隔输出 B1,B2,,BN1B_1, B_2, \dots, B_{N-1}

    💡 解题思路

    1. 题目分析:这是一道简单的模拟题。N100N \le 100Ai100A_i \le 100,数据范围极小,连乘积最大也只有 100×100=10000100 \times 100 = 10000,完全在 int 范围内,没有溢出风险。
    2. 算法推导
      • 读入 NN 和数组 A[0..N1]A[0..N-1](代码中 A[100]
      • 遍历 i=0N2i = 0 \sim N-2,输出 A[i]×A[i+1]A[i] \times A[i+1]
      • 若非最后一个元素(i < N - 2),则额外输出一个空格用于分隔
    3. 边界与细节
      • N2N \ge 2,保证至少有一个 BiB_i 需要输出,无需处理 N=1N=1 的情况
      • 注意输出格式:行末不要有多余空格(代码通过 if (i < N - 2) 判断来避免)

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),仅需一次线性扫描
    • 空间复杂度O(N)O(N)(存储数组),可优化至 O(1)O(1) 但无必要

    💻 标准代码 (C++)

    #include <iostream>
    using namespace std;
    
    int main() {
        int N;
        cin >> N;
        
        int A[100]; // 根据题目限制,N ≤ 100
        for (int i = 0; i < N; i++) {
            cin >> A[i]; // 读入数组 A
        }
        
        // 遍历相邻元素对,计算乘积并输出
        for (int i = 0; i < N - 1; i++) {
            cout << A[i] * A[i + 1]; // 输出 B_{i+1} = A_i × A_{i+1}
            if (i < N - 2) {
                cout << " "; // 非最后一个元素则输出空格分隔
            }
        }
        
        return 0;
    }
    
    • 1

    信息

    ID
    789
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者