【競プロ精進ログ】APG4b編<1-11>

zuka

ついに競技プログラミングを始めました!

本記事は,管理人の競技プロ精進日記としてログを取ったものです。モチベーションを爆上げするために,積極的にアウトプットしていく作戦です。これから競技プログラミングを始めようと考えている人や,なんとなく敷居が高いと感じている人の参考になれば嬉しく思います。その他の記事は以下をご覧ください。

目次

本記事の概要

Atcoderが公表しているc++の入門記事の内容を1からさらっていくものです。今回は1.11.for文・break・continue です。

実装

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

int main() {
  int N, A;
  cin >> N >> A;
  rep(i, N){
    string operand;
    int X;
  	cin >> operand >> X;

    // ここから行いたい操作を記述していく
    if (operand=="+"){
    	A += X;
    }
    else if (operand=="-"){
    	A -= X;
    }
    else if (operand=="*"){
    	A *= X;
    }
    else if (operand=="/" && X!=0){
      	A /= X;
    }
    // その他の場合は"error"と出力してforループを抜ける
    else{
    	cout << "error" << endl;
      	break;
    }
    // 最後に出力例に合うように調整する
    cout << i+1 << ":" << A << endl;
  }
}

ポイント

今回おさえるべき内容

 ある回数だけ繰り返す操作はfor文で記述する

 breakはループを中止して抜け出す

 continueはループ中止せず次に進む

ついに出てきました。for文です。機能としてはwhile文と大差ないのですが,分かりやすさの観点でもある回数を明示的に指定できる際にはfor文を用いるのが一般的です。そして,上記コードでは以下のようなforループの書き方をしています。

// マクロの定義
// 何回も「for (int i = 0; i < (int)(n); i++)」と書くのは面倒なので省略形を定義しておく
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

// iが0からN-1まで繰り返す
rep(i, N)

本来はforループを回すためには毎回for (int i = 0; i < (int)(n); i++)と書くべきなのですが,それが億劫なのでrepというマクロをマクロとして冒頭に定義してしまっています。こうすることで,いつでもfor文として,より簡潔なrepを利用することができます。

また,途中でループを抜けたい場合にはbreakを,一回だけ一部の処理を飛ばしたい場合はcontinueを利用します。どちらとも競技プログラミングではよく利用される構文なので,理解しておくようにしましょう。

よかったらシェアしてね!

コメント

コメントする

目次
閉じる