https://atcoder.jp/contests/abc212/tasks/abc212_b
解説
https://atcoder.jp/contests/abc212/submissions/24695908
問題で言われている条件をそれぞれ判定して実装しよう。
入力が数として与えられるので整数型で保持したくなるが、
今回の問題では桁に分けて条件を判定していくので、各桁毎に分けて自分は実装している。
こういう数を桁ごとに分ける場合はstringで取得してみるのもよい選択肢となる。
その後、数の配列に改めて変換していて、文字を数に変換する場合は標準関数を使ってもよいし、'0'で引くことでも実現できる。
条件1
こちらはすべて等しいかどうかの判定であるが、隣接しているもの同士が等しいことを判定すれば、
A=BかつB=CならばA=Cとなるので、全部等しいことが判定できる。
条件2
X[i]+1==X[i+1]であることを判定すればいいのだが、9の次が0になる部分が少し厄介。
これは10で周期をもつという風に言い換えることができ、計算的には10で割った余りとすればよい。
よって、(X[i]+1)%10 == X[i+1]であることを判定しよう。
string _X; int X[4]; //--------------------------------------------------------------------------------------------------- void _main() { cin >> _X; rep(i, 0, 4) X[i] = _X[i] - '0'; // rule 1 if (X[0] == X[1] && X[1] == X[2] && X[2] == X[3]) { cout << "Weak" << endl; return; } // rule 2 bool cmp01 = ((X[0] + 1) % 10) == X[1]; bool cmp12 = ((X[1] + 1) % 10) == X[2]; bool cmp23 = ((X[2] + 1) % 10) == X[3]; if (cmp01 && cmp12 && cmp23) { cout << "Weak" << endl; return; } cout << "Strong" << endl; }