D - Buying Shovels 买铲子问题

22 篇文章 0 订阅
2 篇文章 0 订阅

在这里插入图片描述
在这里插入图片描述
简单说下中文意思:
某人要买n把铲子,商店里有k种类型的包装,如:
包装1里面有1把铲子,
包装2里面有2把铲子,
……
包装k里面有k把铲子。
商店中每一种包装都有无数种。
题目要我们帮他提供买最少包装数量的方案,要求每一种包装中铲子数量是相同的,也就是说这k种类型的包装只挑一种类型购买。

举个例子:
比如买8把铲子,店里有7种不同类型的包装,则只需要买2袋就够了,买两袋4类型包装的,每一包里面有4把铲子。

AC代码:

#include <algorithm>
#include "math.h"
#include "iostream"
using namespace std;
int main(){
    int n,a,b;
    cin>>n;
    while (n--) {
        cin >> a >> b;
        if (b >= a) {
            cout << 1 << endl;
            continue;
        }
        if (b == 1) {
            cout << a << endl;
            continue;
        }

        // a>b的情况,i表示一袋中有i个
        int ans;// 记录买几袋
        for (int i = 1; i <= sqrt(a); i++) { // 一个数的因数一定是成对出现的
            if (a % i == 0) {
                if (a / i <= b) {
                    ans = i;
                    break;
                }
                if (i <= b) {
                    // 有 a/i 种买法
                    ans = a / i;
                }
            }
        }
        cout << ans << endl;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值