C - Otoshidama
コメント歓迎です。
前回の問題と同様の方針でACできました。
前回:B - Sum of Three Integers - 思考する三角形▽
方針
10000円札、5000円札、1000円札それぞれの枚数を変数x, y, zとします。
条件の合計金額Yは与えられているので、x, yが決まるとzは自動的に決まります。
この考え方は前回の問題と同様ですので、前回の記事を参照してください。
x, yはfor文ループで0からNまで変えていきます。
zは自動できまりますが、0以上の整数、かつx+y+z=Nを満たす必要があります。
条件を満たすzが見つかったら問題で定められたフォーマットで出力します。
もし、for文が回りきっても条件を満たすzが見つからなかった場合は、
条件を満たす組み合わせは存在せず、この場合についても問題で定められたフォーマットで出力します。
コード(AC)
#include <iostream> using namespace std; int main(){ // 入力 int N, Y; cin >> N; // 紙幣の合計枚数 cin >> Y; // 合計金額 int x, y, z; x = 0; //10000円札の枚数 y = 0; //5000円札の枚数 z = 0; //1000円札の枚数 bool endflag = false; // 多重ループから抜けるためのフラグ // 全探索 計算量N^2 for (x = 0; x < N + 1; ++x) { for (y = 0; y < N + 1; ++y) { z = (Y - x * 10000 - y * 5000) / 1000; // zが0以上の整数かつx+y+z=Nなら条件を満たす if ((z >= 0) && (x + y + z == N)) { // 出力 cout << x << " " << y << " " << z << " " << endl; endflag = true; } if (endflag) break; } if (endflag) break; } // 最後まで条件を満たさなかった場合の処理 if(endflag == false) { cout << "-1 -1 -1" << endl; } }