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