D - Buying Shovels 买铲子问题

it2023-08-13  71

简单说下中文意思: 某人要买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; } }
最新回复(0)