题意: 某人想从 (0,0)到达 (x ,0 ),问需要的最少步数,每一步的距离为 ai,共有n个 ai。
思路:贪心,取最大距离maxn,如果maxn* 2 > x 则可构成一个等腰三角形,2步就可到达,如果 不满足,则用maxn 横向走,当满足 maxn * 2 > x 时 ,即可。
上述其实有错误,取最大距离的时候,如果 maxn > x ,但是 ai 中 恰有距离等于 x 则答案应该是 1 ,而不是 2。所以输入的时候增加判断,是否有数等于x。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while(t --)
{
int n, x;
cin >> n >> x;
int maxn = 0;
int flag = 0;
for(int i = 1;i <= n;i ++)
{
int y;
cin >> y;
if(y > maxn)
maxn = y;
if(y == x)
flag = 1;
}
if(flag == 1)
cout << 1 << endl;
else if(maxn * 2 > x)
cout << 2 << endl;
else
{
if(x % maxn == 0)
cout << x / maxn << endl;
else
{
cout << x / maxn + 1 << endl;
}
}
}
return 0;
}