AOJ 0257 - Railway Ticket
ブログを1ヶ月以上放置していたので、久しぶりに投稿してみます。問題はAOJ 0257です。
早速ですが、コードは以下のようになります。
a[];main(){read(0,a,5);*a=!puts(*a%3<1|a[1]&1?"Open":"Close");}
今回は、低レベルな入力関数であるreadにより入力を行うことにします。AOJの環境はリトルエンディアンのため、ASCIIコード表を参照すると、各入力に対する配列aの値は次の5通りとなります。ついでに、a[0]を3で割った余りも求めてみます。
入力 | a[0] | a[1] | a[0]%3 | 出力 |
---|---|---|---|---|
1 0 0 | 0x20302031 | 0x30 | 2 | Close |
0 1 0 | 0x20312030 | 0x30 | 2 | Close |
1 1 0 | 0x20312031 | 0x30 | 0 | Open |
0 0 1 | 0x20302030 | 0x31 | 1 | Open |
0 0 0 | 0x20302030 | 0x30 | 1 | Close |
表を見れば分かるように、a[0]%3が0であるか、あるいはa[1]が0x31(すなわち奇数)であればOpenを、さもなくばCloseを出力すれば良いことが分かります。
以上の考察により、コードは上記のようになることが直ちに分かります。