Aizu Online Judgeでプログラムの問題解きを始めた。

プログラムは本で勉強しているが、あまり普段使う機会がない。仕事で使う必要がないというか。プログラムができれば仕事でもいろいろと出来ることがあるのにまだレベルがそこまで行ってない。アルゴリズム題材をどんどん解いていきレベルを上げていこうと思う。今までプログラムの勉強が全然進まなかったので、昼休みの時間を利用してどんどんやっていこう。


まだ始めたばかりなので簡単な問題が多い。出力結果があっていれば正解なので、無駄なことをしていても正解になる。正解はしたが、考え方がいまいちだったなということがある。そんなときに他の人が解いたものを見るとすごく勉強になる。まさに目から鱗が落ちるというかんじだ。

Aizu Online Judgeの問題にはデータが複数用意され、標準入力にゼロが入ったら終了という内容が多い。
普通に考えると、Whileでループで回してif文で標準入力を確認して値がゼロならbreakでループから抜けるという考えだが、While分の条件式で標準入力とANDで結果がゼロであることを確認するという方法があった

int c;
while(cin >> c && c) {
// 処理
}

while は条件式が成立している間ループを続けるが、c++では条件が ゼロ以外のときにロープを続けるようだ。なので1以外の数字でもループを続ける。
もし標準入力だけを条件式にしてみる。

while(cin >> c) {
// 処理
}

するとゼロを入力してもループが終わらない。これは、標準入力のゼロはアスキーコードで入力しているからだ。最初の方法だと標準入力のゼロを変数に入力した段階で、整数のゼロに変換されたので0となり、Whileが終わるということだ。