算法思想就是:先把石头离岸距离进行排序(由近到远),然后从最近的开始,算间隔距离,看能不能从岸边到达,应该就可以了。到达的判别法是:如果能到达第i块石头,而且第i+1块和第i块的间距不超过x的话,第i+1块即可以到达,否则第i+1块就不能到达。
下面是C语言简单代码:
设result是输出量,x为第一个输入量,n为第二个输入量,a数组为第三个输入量。
// 先排序,采用冒泡排序
int i = 0, j =0, temp = 0;
for (i = 0; i < n; i++)
for (j = 0; j < n - 1 - i; j++)
{
if(a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
// 开始计数
int result = 0, flag = 1;
if a[0] <= x // 看第一块石头能否到达
result= 1;
else
flag = 0;
for (i=0; i
{
if (flag)
{
if (a[i+1]-a[i]<=x) // 看间隔
result++;
else
flag = 0; // 后面的石头,都不能到达
}
}
一次跳跃的最大距离为5,每个石墩间的距离为4、4、5、7、5、1(第一个数字4是第一个石墩离开岸边的距离,后面的数字是当前石墩离开前一个石墩的距离),只有前三个石墩才能到达,后面跳不过去了(因为一次跳跃达不到7),就拿不到了,所以只能拿到3枚金币。
我不会啊