[AtCoder]ABC 060A Shiritori ~ 62[C++]

プログラミング

ABC 060A – Shiritori

問題

文字列 A, B, Cが与えられます。これがしりとりになっているか判定してください。

  • Aの最後の文字とBの最初の文字が同じ
  • Bの最後の文字とCの最初の文字が同じ

この2つが正しいか判定してください。
両方とも正しいならば YES、そうでないならば NO を出力してください。

自分の回答

#include <bits/stdc++.h>
using namespace std;
 
int main() {
  string a, b, c;
  cin >> a >> b >> c;
  
  if (a[a.size() - 1] == b[0] && b[b.size() - 1] == c[0]){
    cout << "YES" << endl;
  }
  else {
    cout << "NO" << endl;
  }
}

文字列の最後の文字を取得したい時は、a[a.size() – 1]で求められます。

ABC 061A – Between Two Integers

問題

3つの整数 A,B,Cが与えられます。
整数 CがA以上 かつ B以下であるかを判定してください。

自分の回答

#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int a, b, c;
  cin >> a >> b >> c;

  if (a <= c && c <= b){
    cout << "Yes" << endl;
  }
  else {
    cout << "No" << endl;
  }
}

問題文の通りですね。

ABC 062A – Grouping

問題

すぬけ君は、1から12までの整数を下図のようにグループ分けしました。 整数x, y(1≤x<y≤12) が与えられるので、x,yが同一のグループに属しているか判定してください。

自分の回答

#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int x, y;
  cin >> x >> y;

  string x_group, y_group;

  if (x == 1 || x == 3 || x == 5 || x == 7 || x == 8 || x == 10 || x == 12){
    x_group = "a";
  }
  else if (x == 4 || x == 6 || x == 9 || x == 11){
    x_group = "b";
  }
  if (y == 1 || y == 3 || y == 5 || y == 7 || y == 8 || y == 10 || y == 12){
    y_group = "a";
  }
  else if (y == 4 || y == 6 || y == 9 || y == 11){
    y_group = "b";
  }

  if (x == y || x_group == y_group){
    cout << "Yes" << endl;
  }
  else {
    cout << "No" << endl;
  }
}

とても解くのに時間がかかってしまいました。rubyのinclude?メソッドのように、配列に要素が含まれるかどうかを簡単に確かめる方法があれば、楽にできたのですが、C++にはそれにあたるものがないみたい?find関数も文字列にしか使えませんし、、、。
結局、ゴリ押しで解いてしまいました。無念。

xとyの値が等しい時は、どのグループに属しているか判別するは必要なく、”Yes”を出力すれば良いです。なので、2だけのグループに属するかどうかは判別する必要はありません。

タイトルとURLをコピーしました