| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4578 人关注过本帖
标题:[讨论]青蛙该怎样过桥?
只看楼主 加入收藏
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
 问题点数:0 回复次数:51 
[讨论]青蛙该怎样过桥?
在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。

题目给出独木桥的长度L,
青蛙跳跃的距离范围S,T,
桥上石子的总数,
桥上石子的位置。

你的任务是确定青蛙要想过桥,最少踩到的石子数。

输入的第一行有一个正整数L(1 <= L <= 10的9次方),表示独木桥的长度。
第二行有两个正整数S,T,表示青蛙一次跳跃的最小距离与最大距离,其中1 <= S <= T <= 10。
第三行正整数M,为桥上石子的总数,1 <= M <= 100。
第四行有M个不同的正整数分别表示这M个石子在数轴上的位置
(数据保证桥的起点和终点处没有石子)。
所有相邻的整数之间用空格分隔开。

输出应为一个整数,表示青蛙过河最少要踩到的石子数。

例如若输入
10
2 3
5
2 3 5 6 7

则输出应为
2
搜索更多相关主题的帖子: 青蛙 
2006-05-03 20:51
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 

能不能定义一个数组a,然后使带石头位置为1,其他为0,然后从0开始找!k为踩到石子个数!使最远跳距m,近n,t=0;然后(t=t+m;t>t+n;t--)假如在这之中有0的话取第一个t等于0元素的位置。如果没有0,t移到t+m的位置,k++.循环直到t+m>L!不知道行不行这个啊!


用0-1统治世界!
2006-05-04 01:32
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 

不行,真遗憾啊·!


用0-1统治世界!
2006-05-04 01:40
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

尝试写的,测试数据也太少,无法验证是否正确

程序算大数需要时间太长,所以我先去改改



算了,我还是放上来。大家给看看吧,这算法不细致。
如果点的设置间隔比青蛙跳的距离大得多
那计算机都快累死了,我今天忙,谁帮我改改好了
程序中石头坐标默认从小到大输入

#include "stdio.h"
#include "malloc.h"

long num_min,bridge_len,*array,stone_sum;
int min,max;

int Search(long i)
{
long j;

for(j=0;j<stone_sum;j++)
if(array[j]==i)
return 1;
return 0;
}

void Frog_Jump(long i,long total)
{
int j;
long num;

for(j=min;j<=max;j++)
{
num=total+Search(i+j);
if( (i+j)<array[stone_sum-1] )
Frog_Jump(i+j,num);
if( (i+j)>=array[stone_sum-1] && num < num_min )
num_min=num;
}
}

int main()
{
long i;

printf("please input the length of bridge :\n");
scanf("%ld",&bridge_len);
printf("please input the range of frog :\n");
scanf("%d%d",&min,&max);
printf("please input the num of stone :\n");
scanf("%ld",&stone_sum);
array=(long *) malloc (sizeof(long)*stone_sum);
for(i=0;i<stone_sum;i++)
scanf("%ld",array+i);

num_min=stone_sum;
Frog_Jump(0,0);

printf("\n%ld\n",num_min);
free(array);
return 0;
}



[此贴子已经被作者于2006-5-4 6:55:08编辑过]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-04 03:09
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 
厉害就是看不懂,没算法读程序好没耐心啊!

用0-1统治世界!
2006-05-04 04:06
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 

哥们对穷举法好象很着迷啊!


用0-1统治世界!
2006-05-04 04:07
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(feng1256)尝试写的,测试数据也太少,无法验...
版主全对呀。此题我也没想出好办法来,正在挠头皮哩

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-04 05:45
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
你看到程序啦?我刚把程序给删下来了 ,我刚才算个大数,计算机算了半天

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-04 05:46
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

问下,10->7->4->1->exit
这样不是就一个石头吗?
俺有些不理解哩?


对不礼貌的女生收钱......
2006-05-04 09:25
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

没人给个解释吗?
我还想做这道题呀,却还搞不懂题意啊!??


对不礼貌的女生收钱......
2006-05-04 09:49
快速回复:[讨论]青蛙该怎样过桥?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016462 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved