プログラミング

【競プロ精進日記】ABS編<5>

本記事は管理人が競技プログラミングを始めたため,その精進日記としてログを取ったものです。アウトプットして積極的にモチベーションを上げていく作戦です。記事目次は以下をご覧ください。

内容は管理人の推測や恣意的な感想を大いに含みます。もし間違い等ありましたらご指摘ください。あくまでも参考程度にお願い致します。

【競プロ精進日記】目次まとめ ABC Atcoder Beginner Contestの過去問を解いています。最低限のコメントと一言が添えられています。 ...

AtCoder Beginners Selection

AtCoder Beginners Selectionの問題を1から解いていくシリーズです。使用言語はc++とpythonです。今回はABC087B Coinsです。

c++

#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

int main() {
  int a, b, c, x = 0;
  int ans = 0;
  cin >> a >> b >> c >> x;
 // 3重ループ開始
  rep(i, a+1){
    rep(j, b+1){
      rep(k, c+1){
        if (500*i + 100*j + 50*k == x) ans++;
      }
    }
  }
  cout << ans << endl;
}

3重ループができますかという問題です。「500i + 100j + 50*k」ではなく「500a + 100b + 50*c」としてしまいがちなので注意です。また,for文の範囲は+1したものになっていますが,これはインデックスが0始まりだからです。

python

a = int(input())
b = int(input())
c = int(input())
x = int(input())

ans = 0

for i in range(a+1):
  for j in range(b+1):
    for k in range(c+1):
      if 500*i + 100*j + 50*k == x:
        ans += 1

print(ans)

pythonでも方針は同様です。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です