見出し画像

プログラミング学習記録【25日目】/ AtCoder Beginners Selection -4

ABC085C - Otoshidama

問題文
青橋くんは祖父からN枚の紙幣を受け取り、合計Y円もらったと言っているが、間違っている可能性がある。青橋くんの言っている状況があり得るかどうか判定し、ありえる場合はお札の内訳の候補を1つ出力せよ。候補がない場合、出力は -1 -1 -1 とすること。

まあとりあえず数を受け取る。

int N,a;
cin >> N >> a;

お札の枚数は一定なので、福沢さんと樋口さんの枚数をループで変え、野口さんの枚数を残りにすれば良い。今回も忘れてループ範囲をNまでにしてしまい、不正解を叩き出したあと頭を抱えて悩んでいたが、コードを見つめて何回か動かしているうちに、あ、ループ範囲やん、と気づくに至った。他に難しいことは特にないので、コードを以下に示す。

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

int main()
{
 int N, a;
 cin >> N >> a;
 bool judge = true; //何でも良かった
 rep(i, N + 1)//諭吉さんループ
 {
   rep(j, N + 1)//樋口さんループ
   {
     int k = N - i - j;//残りは野口さん
     if (k > N || k < 0)//野口さんはN以上にはならず、0いかにもならない
       break;
     int sum = i * 10000 + j * 5000 + k * 1000;//金額
     if (sum == a)
     {
       cout << i << " " << j << " " << k << endl;
       judge = false;
       break;
     }
   }
   if (judge == false)
     break;
 }
 if (judge == true)
 {
   cout << "-1 -1 -1" << endl;
 }
}

画像1

今日はここまで!

この記事が気に入ったらサポートをしてみませんか?