高手求解!!!!

题目描述小冬冬历险记:小冬冬来到一条河边,河中有排成一直线的几个石墩,每个石墩上面有一枚金币,小冬冬为了凑一些盘缠,决定跳到这些石墩上拿这些金币,读入小冬冬一次跳跃的最大... 题目描述
小冬冬历险记:小冬冬来到一条河边,河中有排成一直线的几个石墩,每个石墩上面有一枚金币,小冬冬为了凑一些盘缠,决定跳到这些石墩上拿这些金币,读入小冬冬一次跳跃的最大距离和每个石墩离开岸边的距离(不考虑石墩本身的大小,只要一次跳跃的最大距离大于等于石墩的间隔距离就算可以到达),问最多能拿到几枚金币。如下示意图:
输入
第一行:一个整数x,即一次跳跃的最大距离(1≤x≤30)第二行:石墩的个数n(0≤n≤20)第三行:n个整数,用空格隔开,表示每个石墩离开河岸的距离ai(0<ai≤500)
输出
一个整数,即可以拿到的最多金币数
样例输入
5
6
4 8 13 20 25 26样例输出
3
展开
eulerw
2012-12-29 · TA获得超过9189个赞
知道大有可为答主
回答量:1366
采纳率:37%
帮助的人:725万
展开全部
算法思想就是:先把石头离岸距离进行排序(由近到远),然后从最近的开始,算间隔距离,看能不能从岸边到达,应该就可以了。到达的判别法是:如果能到达第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<n-1; i++)

{

if (flag)

{

if (a[i+1]-a[i]<=x) // 看间隔

result++;

else

flag = 0; // 后面的石头,都不能到达

}

}
冰浪之海
2012-12-23 · TA获得超过319个赞
知道答主
回答量:79
采纳率:0%
帮助的人:26.9万
展开全部
一次跳跃的最大距离为5,每个石墩间的距离为4、4、5、7、5、1(第一个数字4是第一个石墩离开岸边的距离,后面的数字是当前石墩离开前一个石墩的距离),只有前三个石墩才能到达,后面跳不过去了(因为一次跳跃达不到7),就拿不到了,所以只能拿到3枚金币。
追问
用程序做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jxw_1983
2012-12-25 · TA获得超过1750个赞
知道小有建树答主
回答量:759
采纳率:100%
帮助的人:372万
展开全部
我不会啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式