kotonoha_pcg@気ままに雑記

kotonoha_pcgが気分次第で様々な事を書き置きます.別館:http://tukdua.hatenadiary.jp/

最近解いた問題と条件演算子

 ここ一週間くらいで,(個人的には)結構な量の問題を解いてるんじゃないかと思ってます.取り組む前はAOJのITPが3すら終わっていなかったのに対し,今はなんとかITP6に入りました.一応,AOJ以外にもyukicoderやatcoder等のプロコンサイト/オンラインジャッジの問題も解いてはいるのですが,あまり一発で解法に辿りつけていることは無かったし,そのAOJですら,ITP1_5_CとDは書き方が分からず(特にD),結構な割合でSolutionsを見てしまっています.
 それで,今日のは,そのコードの中にあった"?"という演算子について,です.ITP1_5_Cのコードに,

cout<<((i+j)%2 ? '.' : '#');

とあって,「何だこの ? :」ってなったので調べました.で,その結果が条件演算子というものだったようで,改めて初歩から勉強していないのと知識不足であったのを痛感しました.

? :

 "? :"演算子の使い方はとても単純で,例としては,

cnt=(cnt<100) ? cnt+1 : 0;

でいいようです(参考:http://www.c-lang.org/operator.html).この時の処理内容としては,

if(cnt<100){
 cnt=cnt+1;
}else{
 cnt=0;
}

を行っているのと同じようになります."?"の前に記述する文でif文の()内の処理を,"?"でifを表し,その後に":"で前後を分けて「真のとき : 偽のとき」となっています.つまり,先ほどのITP1_5_Cのコードの意味としては,

if((i+j)%2==0){
 cout<<'.';
}else{
 cout<<'#';
}

となります.