けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 307 A - Weekly Records (灰色, 100 点)

for 文の練習。色んな書き方がありそう。

問題概要

高橋君は  N 週間歩いた距離を記録した。 i = 1, 2, \dots, 7N 日目には、それぞれ  A_{i} 歩歩いた。

各週について、高橋君が 1 週間で歩いた歩数の合計を出力してください。

解法

前提として、配列を 0 始まりで考えることにする。この場合、1 週間の終わりを表す配列の添字は 6, 13, 19, .... となる。

for 文を用いて添字  i 0 から  7N-1 まで動かしつつ、 i = 6, 13, 19, \dots で区切るような実装が楽だと思う。

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 入力
    int N;
    cin >> N;
    vector<int> A(N*7);
    for (int i = 0; i < N*7; ++i) cin >> A[i];
    
    int sum = 0;  // 和を表す変数
    for (int i = 0; i < N*7; ++i) {
        sum += A[i];
        
        // i = 6, 13, 19, ... で一区切りとなる
        if (i % 7 == 6) {
            cout << sum << " ";
            
            // sum をリセットする
            sum = 0;
        }
    }
    cout << endl;
}