配钥匙

描述

小姐姐想要配 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.csdn.net/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值