简单说下中文意思:
某人要买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;
}
}