描述
小姐姐想要配 n 把钥匙,她走过开锁铺问老板价钱,老板是这么说的:
小姐姐想知道完成配n把钥匙的任务最少需要花费多少钱?
输入
题目有多组测试数据。第一行输入一个整数T(组数少于100组),表示测试数据组数,对于接下来每组测试数据:
每组测试数据输入只有一行,分别为4个整数,表示n、m、A、B。
0≤A,B≤1000000,0≤n,m≤1000;
输出
对于每组测试数据: 在一行内输出一个整数,表示答案
输入样例 1
1
5 2 2 3
输出样例 1
8
代码如下:
这题比较坑的就是可以多买,不止n把
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m,A,B,s,x,y;
cin>>n>>m>>A>>B;
if(B/m>=A)
{
s=A*n;//A元一把比B元m把便宜,就买n把单价为A的
}
else//B元m把比A元一把便宜时
{
int s1,s2;
x=n/m;
y=n%m;
s1=x*B+y*A;//先买m的倍数的钥匙,剩下的买A元一把
s2=B*x+B;//先买m的倍数的钥匙,剩下的不足m的也买B元一把,即考虑多买情况,买大于n把,结果也比买A元一把划算
s=min(s1,s2);
}
cout<<s<<endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m,a,b,sum,t;
cin>>n>>m>>a>>b;
sum=(n/m)*b;
t=n%m;
sum+=t*a;
sum=min(sum,a*n);
sum=min(sum,(int)ceil((double)n/m)*b);
cout << sum << endl;
}
return 0;
}
扩展资料:
转载如下:
https://blog.youkuaiyun.com/qq_36487644/article/details/84396579
1.ceil函数(向上取整)
extern float ceilf(float); //参数为flot类型
extern double ceil(double); //参数为double类型
extern long double ceill(long double); //参数为long double类型
举例:向上取整函数,ceil(11.1) = 12 ceil(11.9) = 12 ceilf((CGFloat)10/3) = 4
注意:ceilf(-11.1) 结果为-11
2.floor函数(向下取整)
extern float floorf(float);//参数为flot类型
extern double floor(double);//参数为double类型
extern long double floorl(long double);//参数为long double类型
举例:向上取整函数,floor(11.1) = 11 floor(11.9) = 11 floor((CGFloat)10/3) = 3
注意:floor(-11.1) 结果为-12
3.round函数(四舍五入)
extern float roundf(float);//参数为flot类型
extern double round(double);//参数为double类型
extern long double roundl(long double);//参数为long double类型
举例:向上取整函数,round(11.1) = 11 round(11.9) = 11 round((CGFloat)10/3) 结果为3
注意:round(-11.1) = -11, round(-11.5) = -12