题解:P1909 [NOIP2016 普及组] 买铅笔
题解:P1909 [NOIP2016 普及组] 买铅笔
这是一道很好的入门题,特别适合新手在刚学信奥的时候做。
思路
我们一个包装里有 ceil(x) 函数,这个函数可以对
这里做一个拓展:
ceil(x):对x 进行向上取整;round(x):对x 进行四舍五入取整;floor(x):对x 进行向下取整。
现在我们知道要买的包书了,那么我我们要计算它的价格,假设一包笔是
既然要求到最小值,那肯定要使用到 min(a, b); 函数,这个函数可以求出
这里做一个拓展:
min(a, b):在a 和b 之间取最小值;max(a, b):在a 和b 之间取最大值。
而我们要求三个数的最小值,可以先求出两个数的最小值,再将求出来的最小值跟第三个数进行比较,就可以得出三个数的最小值了。
但是仅仅这样会出现错误,因为两个整数在进行运算时,得出来的结果也是整数,这时的向上取整是无效的(即对一个整数进行向上取整),因此我们可以的式子变为
代码
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
int n, a, ashuliang, ajiage, b, bshuliang, bjiage, c, cshuliang, cjiage;
int main()
{
cin >> n >> ashuliang >> ajiage >> bshuliang >> bjiage >> cshuliang >> cjiage;
a = ceil(n * 1.0 / ashuliang) * ajiage;
b = ceil(n * 1.0 / bshuliang) * bjiage;
c = ceil(n * 1.0 / cshuliang) * cjiage;
cout << min(min(a, b), c) << endl;
return 0;
}