けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 223 A - Exact Price (灰色, 100 点)

えぐいコーナーケースに注意! でもサンプルにあるね。

問題概要

財布に  100 円玉が 1 枚以上入っています。

財布に入っている合計金額がちょうど  X 円であるようなことが、あり得るかどうかを判定してください。

制約

  •  0 \le X \le 1000

考えたこと

基本的には「 X が 100 の倍数ならば "Yes" (そうでなければ "No")」と考えればよいでしょう。

ただし、100 円玉が 1 枚以上あることに注意すると、 X \gt 0 であることに注意しましょう。よって、

  •  X \gt 0 かつ  X が 100 の倍数のとき:"Yes"
  • そうでないとき:"No"

と処理すればよいでしょう。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int X;
    cin >> X;
    if (X > 0 && X % 100 == 0)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
}

AtCoder ABC 222 A - Four Digits (灰色, 100 点)

色んな方法がある。C 言語では、 printf() 関数を用いるのが楽だと思われる。

問題概要

0 以上 9999 以下の整数  N が与えられます。

 N の先頭に必要なだけ 0 をつけ、4 桁の文字列にしたものを出力してください。

解法

C 言語であれば、整数値  N の前に、4 桁になるように 0-padding する操作は次のように書ける。

printf("%04d\n", N);

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    scanf("%d", &N);
    printf("%04d\n", N);
}

AtCoder ABC 221 A - Seismic magnitude scales (灰色, 100 点)

for 文を用いるのが楽だと思う。

問題概要

マグニチュード  A の地震は、マグニチュード  B の地震の何倍の強さか?

(1 上がると 32 倍となる)

制約

  •  3 \le B \le A \le 9

解法

 32 A - B 回かけた値を求めればよい (つまり  32^{A-B})。

これを求めるためには、関数 pow() を用いるか、for 文を用いればよい。具体的には、答えを格納する変数を res としたとき

  • 初期状態では res = 1 としておく
  • for 文を用いて、 A - B 回、res *= 32 とする

というようにすればよい。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int A, B;
    cin >> A >> B;
    
    int res = 1;
    for (int i = 0; i < A - B; ++i) {
        res *= 32;
    }
    cout << res << endl;
}

AtCoder ABC 220 A - Find Multiple (灰色, 100 点)

for 文を用いるのが楽だと思う。

問題概要

 A 以上  B 以下の  C の倍数が存在するならば 1 つ求め、存在しない場合は -1 を出力せよ。

制約

  •  1 \le A \le B \le 1000
  •  1 \le C \le 1000

考えたこと

for 文を用いるのが最も楽だと思う。

 x = A, A+1, A+2, \dots, B について、 C で割り切れるかどうかを判定していき、

  • 割り切れたら、その瞬間に  x の値を出力して、処理を打ち切る
  • for 文を最後まで回しても割り切れなかったら、-1 を出力する

というようにすれば OK。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int A, B, C;
    cin >> A >> B >> C;
    
    for (int x = A; x <= B; ++x) {
        if (x % C == 0) {
            cout << x << endl;
            return 0;
        }
    }
    cout << -1 << endl;
}

AtCoder ABC 219 A - AtCoder Quiz 2 (灰色, 100 点)

if 文を使って落ち着いて整理しよう。

問題概要

100 点満点の試験を受ける。得点に応じて以下の評価を受ける。

  • 0 点以上 40 点未満のとき、初級
  • 40 点以上 70 点未満のとき、中級
  • 70 点以上 90 点未満のとき、上級
  • 90 点以上のとき、エキスパート

得点が  X であったとき、次の段階の評価を受けるのに追加で必要な点数を答えよ。ただし、エキスパートのときは "expert" と出力せよ。

解法

次のように考えればよい。

  •  X \lt 40 のとき:あと  40 - X 点必要
  •  40 \le X \lt 70 のとき:あと  70 - X 点必要
  •  70 \le X \lt 90 のとき:あと  90 - X 点必要
  •  90 \le X のとき:"expert"

あとは、if-else 文を活用して答えれば OK。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int X;
    cin >> X;
    if (X < 40)
        cout << 40 - X << endl;
    else if (X < 70)
        cout << 70 - X << endl;
    else if (X < 90)
        cout << 90 - X << endl;
    else
        cout << "expert" << endl;
}