よくあるバグの代表例は、
- 無限ループ
- out of bounds 系エラー
あたりだろう。
これらのバグは、ちょっとした事を実践することで回避することができる。
それは、whileループの禁止である。
whileループを使うと、
- やたらと処理が複雑になったり、
- 条件式が偽にならず無限ループになったり、
と悪いことばかり。
大抵のwhileループは、forループで書けるので、whileは禁止してしまってもいいかと思う。
(あと余談だが、ショートコーダーはwhileループは使わないらしい。)
例えば、この問題。
for文で書くと、綺麗に書けます。
whileで書くと、多分カオスになるでしょう。そしてバグが出るはず・・。
for文で書いたプログラムはこちら。
vector<pair<int, int> >vec, ret;
int main() {
int n, s, t;
scanf("%d", &n);
while (n--) {
scanf("%d %d", &s, &t);
vec.PB(MP(s,t));
}
sort(ALL(vec));
int pos = 0;
for (;pos < (int)vec.size(); pos++) {
int s = vec[pos].first;
int t = vec[pos].second;
for (; pos+1 < (int)vec.size() && vec[pos+1].first <= t; pos++)
t = max(t, vec[pos+1].second);
ret.PB(MP(s, t));
}
REP(i, ret.size())
printf("%d %d\n", ret[i].first, ret[i].second);
return 0;
}
0 件のコメント:
コメントを投稿