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
を利用します。どちらとも競技プログラミングではよく利用される構文なので,理解しておくようにしましょう。
コメント