プログラミング学習記録【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;
}
}
今日はここまで!
この記事が気に入ったらサポートをしてみませんか?