第17回情報オリンピック予選過去問1
JOI 君は鉛筆を N 本買うために近くの文房具店に行くことにした.
文房具店では鉛筆が一定の本数ずつのセットで売られている.セット X は A 本で B 円,セット Y は C 本で D 円である.
JOI 君はセット X かセット Y の一方を選び,選んだセットをいくつか購入する.両方のセットを購入することはできない.N 本以上の鉛筆を得るために必要な金額の最小値を求めよ.
入力は以下の形式で標準入力から与えられる.
N A B C D
ヒント
1セット $ A 本の鉛筆を $ N 本買うためには,$ \lceil N/A \rceil セット買う必要がある。ここで $ \lceil ... \rceil は切り上げて整数にすることを意味する。$ \lceil N/A \rceil = \lfloor (N+A-1)/A \rfloor であることに注意。ここで $ \lfloor ... \rfloor は切り捨てて整数にすることを意味する。C言語の整数どうしの割り算は切り捨てて整数になる。 解答例
code:ans1.c
int main(void)
{
int n, a, b, c, d, x, y;
scanf("%d%d%d%d%d", &n, &a, &b, &c, &d);
x = (n + a - 1) / a * b;
y = (n + c - 1) / c * d;
if (x < y) {
printf("%d\n", x);
} else {
printf("%d\n", y);
}
return 0;
}
ついでに・・・
現在の消費税は10%である。消費税を求めるのに0.1を掛けたくなるが,0.1という値は2進法で表すと無限小数になり,正確な値が得られない可能性がある。整数の演算だけを使って,与えられた金額の消費税を四捨五入した整数値で求めるプログラムを書け。