AtCoderの過去問対策です。ABCで解けなかった問題、ためになった問題のコードを備忘録として残します。
問題
B - Card Game for Three (ABC Edit)
解説
https://img.atcoder.jp/data/arc/061/editorial.pdf
解答例
#include <bits/stdc++.h> using namespace std; int main(){ string sa, sb, sc; cin >> sa >> sb >> sc; char result = 'a'; char turn = sa.at(0); while(true){ if(turn == 'a'){ if(sa.size() == 0){ // 終了時の処理 result = 'A'; break; } // 継続時の処理 turn = sa.at(0); sa = sa.substr(1); }else if(turn == 'b'){ if(sb.size() == 0){ // 終了時の処理 result = 'B'; break; } // 継続時の処理 turn = sb.at(0); sb = sb.substr(1); }else{ // Cのターン if(sc.size() == 0){ // 終了時の処理 result = 'C'; break; } // 継続時の処理 turn = sc.at(0); sc = sc.substr(1); } } cout << result << "\n"; }
メモ
- while文に慣れること
- while文の条件式がtrueなので、どこかでループを抜ける処理を書く
substr()
- 部分文字列を取得する
- pos 番目から n 要素の文字列を返す
- 引数省略時は、先頭位置( 0 番目)から全要素( npos )の文字列を返す
#include <bits/stdc++.h> using namespace std; int main(){ string sa = "abcb"; cout << sa << "\n"; // 出力:abcb sa = sa.substr(1); // 部分文字列で上書きする(元のデータを書き換える) cout << sa << "\n"; // 出力:bcb sa = sa.substr(1); cout << sa << "\n"; // 出力:cb }