AtCoder Beginner Contest 087_B - Coins

そもそもC++の使い方がよくわからなくて

そこからちまちまやってた。

 

気付き

 mainの中に関数を定義しちゃいけないのね。

 Javaだとそういうのやってたような気がしたけど、、、とかとか。

 

戯言

 あんま入力チェックっていうのはいらないのかしら。

 制約はもうそれしか来ないよってことなのか・・・

 競技プログラミングの考え方だと「そんなデータ来るわけないやん」で

 おしまいなんだろうな。

 

 for文でクルクル回せばいいんだろうなーっていうのは

 なんとなくわかったけど、最後どうすればいいのかわからなかった。

 for文を1個抜ける毎に全体の金額からその階層の金額を引いた金額を渡す?

 とか思って上手くいかなかった。最後が50*nで割り切れたらカウントUP的な感じ。

 最後は答え見ちゃったけど、悔しいな・・・・もう少し頑張ります。

 

 結果のソースコード長が2391byte と他人の2〜7倍あって笑えない・・・・

 一人飛び抜けてて恥ずかしい。

 

#include <iostream>

#include <math.h>            ←これ途中ややこしく考えてた時の残骸

using namespace std;

// クラス宣言部

class myclass{

    

public:

    int input_check(int a, int b, int c ,int d);

    int calc_street(int a, int b, int c ,int d);

};

 

/*入力チェック*/

int myclass::input_check(int a, int b, int c, int d){

    if (a + b + c < 1){

        return (1);

    }

    if *1{

        return (2);

    }

    if (d < 50 || d > 20000){

        return (3);

    }

    if (d % 50 != 0 ){

        return (4);

    }

    return (0);

}

 

/*何通りあるのか計算する*/

int myclass::calc_street(int a, int b, int c, int d){

    int street = 0;

    for(int coin500 = 0; coin500 <= a; coin500++){

        for(int coin100 = 0; coin100 <= b; coin100++){

            for(int coin50 = 0; coin50 <= c; coin50++){

                if((coin500 * 500) + (coin100 * 100) + (coin50 * 50) == d){

                    street = street + 1;

                }

            }

        }

    }

    return street;

}

 

 

 

 

int main (){

    

    //500円の枚数

    int coin_500;

    cin >>  coin_500;

    

    //100円の枚数

    int coin_100;

    cin >> coin_100;

    

    // 50円の枚数

    int coin_50;

    cin >> coin_50;

    

    // 合計金額

    int total_price;

    cin >> total_price;

    

    myclass x;

    //入力チェックの結果の確認

    int return_i_check = x.input_check(coin_500,coin_100,coin_50,total_price);

    if(return_i_check == 1){

        cout << "コインの合計枚数が1より小さいです" << "\n";

        return 0;

    } else if (return_i_check == 2){

                cout << "コインのいずれかが0〜50の間ではありません" << "\n";

                return 0;

    } else if (return_i_check == 3){

                cout << "合計金額が50〜20000の間ではありません" << "\n";

                return 0;

    } else if (return_i_check == 4){

                cout << "合計金額が50で割り切れる数字ではありません" << "\n";

                return 0;

    }

    

    //計算結果を求める

    cout <<  x.calc_street(coin_500,coin_100,coin_50,total_price) << "\n";

 

    return 0;

    

}

 

*1:a > 50) || (b > 50) || (c > 50