0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoderログ:0052 - ABC 212 B

Last updated at Posted at 2021-08-02

問題

問題文

$4$ 桁の暗証番号 $X_1 X_2 X_3 X_4$ が与えられます。番号は先頭の桁が $0$ であることもあり得ます。暗証番号は以下のいずれかの条件をみたすとき弱い暗証番号と呼ばれます。
・$4$ 桁とも同じ数字である。
・$1 \le i \le 3$ をみたす任意の整数 $i$ について、$X_{i+1}$ が、$X_i$ の次の数字である。 ただし、$0 \le j \le 8$ について $j$ の次の数字は $j+1$ であり、$9$ の次の数字は $0$ である。
与えられた暗証番号が弱い暗証番号ならば Weak を、そうでないならば Strong を出力してください。

制約

・$0 \le X_1,X_2,X_3,X_4 \le 9$
・$X_1,X_2,X_3,X_4$ は整数である。

回答

回答1 (AC)

弱いパスワードには 2 種類あり、1 種類目は $4$ 桁とも同じ数字である 0000, 1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 9999 の10通り、2 種類目は $4$ 桁が連続した数字である 0123, 1234, 2345, 3456, 4567, 5678, 6789, 7890, 8901, 9012 の10通りです。弱いパスワードの個数がそれなりに少ないので、直接判定することが可能です。コードは以下のようになりました。

abc212b-1.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  string x;
  cin >> x;

  string answer = "Strong";
  if ( x=="0000" || x=="1111" || x=="2222" || x=="3333" || x=="4444" 
      || x=="5555" || x=="6666" || x=="7777" || x=="8888" || x=="9999"
      || x=="0123" || x=="1234" || x=="2345" || x=="3456" || x=="4567" 
      || x=="5678" || x=="6789" || x=="7890" || x=="8901" || x=="9012" ) {
    answer = "Weak";
  }

  cout << answer << endl;
}

回答2 (AC)

回答1のアプローチでは弱いパスワードの個数がもっと多い場合に対応できないので、if 文の判定を数式で表現してみます。パスワードの各桁の数字 x1, x2, x3, x4 に対し、1 種類目の弱いパスワード判定は簡単で、全ての桁が等しいかを確認すれば良いです。2 種類目の弱いパスワード判定は少し工夫が必要で、x2=(x1+1)%10 のように10で割った余りを考慮すれば良いでしょう。コードは以下のようになりました。

abc212a-2.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int pw, x1, x2 ,x3, x4;
  cin >> pw;
  x4 = pw%10;
  x3 = (pw/10)%10;
  x2 = (pw/100)%10;
  x1 = pw/1000;
    
  string answer = "Strong";
  if ( x1==x2 && x2==x3 && x3==x4 ) {
    answer = "Weak";
  } else if ( (x1+1)%10==x2 && (x2+1)%10==x3 && (x3+1)%10==x4 ) {
    answer = "Weak";
  }

  cout << answer << endl;
}

調べたこと

AtCoder の解説公式解説

回答2と同じ方針でしたが、回答1についても言及されていました。

AtCoder の解説 → [ユーザ解説](https://blog.hamayanhamayan.com/entry/2021/08/01/011855

)
回答2と同じ方針でした。

リンク

前後の記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?