以下の内容はhttps://shiroyuki2020.hatenablog.com/entry/atcoder_abc045_bより取得しました。


AtCoder|ABC045:B - 3人でカードゲームイージー

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
}




以上の内容はhttps://shiroyuki2020.hatenablog.com/entry/atcoder_abc045_bより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14