1 条题解

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

    📝 题目大意

    给定 NN 周共 7N7N 天的每日步数 A1A7NA_1 \sim A_{7N},按周分组(每 77 天一组),输出每周的总步数,空格分隔。

    💡 解题思路

    1. 题目分析

      • N10N \leq 10,数据规模极小,直接模拟即可。
      • 每周恰好 77 天,总共 7N7N 个输入,按顺序每 77 个一组求和。
    2. 算法推导

      • 读入 NN 后,将 7N7N 个步数存入数组 a[](下标从 11 开始)。
      • 维护两个指针 xyx 指向当前周的起始下标,y 指向当前周的结束下标,初始 x=1, y=7
      • 对于第 ii 周(i=1Ni=1 \sim N):
        • 遍历 a[x]a[y] 求和,存入临时变量 m
        • 输出 m 并加空格。
        • xy 各向后移动 77 位(x += 7, y += 7),进入下一周。
    3. 边界与细节

      • AiA_i 可能为 00,求和时不会出错,无需特殊处理。
      • 每周固定 77 天,不存在不足 77 天的情况(7N7N 天恰好整除)。
      • 输出格式要求空格分隔,末尾多余空格通常也能通过,但标准代码在最后一个数后也有空格,本题评测机对此宽容。

    ⏱️ 复杂度分析

    • 时间复杂度O(7N)=O(N)O(7N) = O(N),遍历所有 7N7N 个元素求和。
    • 空间复杂度O(7N)=O(N)O(7N) = O(N),存储所有步数;也可优化为 O(1)O(1) 边读边算,但 NN 很小,无必要。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int n;
    	long a[100005];          // 存储每日步数,下标从 1 开始
    	cin >> n;
    	int x = 1, y = 7;        // x: 当前周起始下标, y: 当前周结束下标
    	for(int i = 1; i <= n * 7; i++) cin >> a[i];  // 读入所有步数
    	for(int i = 1; i <= n; i++){
    		int m = 0;           // 本周步数总和
    		for(int j = x; j <= y; j++) m += a[j];  // 累加一周 7 天
    		x = x + 7;           // 窗口右移 7 天
    		y = y + 7;
    		cout << m << ' ';    // 输出本周总和
    	}
    	return 0;
    }
    
    • 1

    信息

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