c语言程序设计题库……青蛙过河,求大神给发一下 总体设计和详细设计,可以是流程图!

C语言问题 过河_百度知道
C语言问题 过河
题目如下,希望能给出解答,思路+过程+代码,谢谢。
在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成...
为了不浪费积分,给出解答(指10^9的数据也能过)一定给25+分
我有更好的答案
就是遍历每一个x,x∈[a用动态规划可解。 用f[a][b]表示从a点到b点需要踩到的最少石子数,则问题可以抽象为求f[1][L]的最小值。进一步抽象:求f[a][b]最小值,b](假设并指定a&b,青蛙能从a点分若干次跳到x,并从x分若干次跳到b),f[a][b]=min(f[a][x]+f[x][b])
采纳率:68%
for(i=0;i&i&=i--)
if(bristone[index+i]==0)
printf(&Input the range of distance:&);
scanf(&%d%d&,&bridgelen),楼主自己改吧#include &stdio.h&
while(index&bridgelen)
{ for(i=\n&quot,maxdis,
index=0:1;Input the number of stone&);
scanf(&%d&,则说明避不开石子,必踩石子数增加,同时取最长距离跳(尽快过桥)3.重复进行2直到过完桥为止代码如下,&stone[i]);
bristone[stone[i]]=1;);Input the length of bridge:&);
scanf(&%d&,bristone[i]);
printf(& if(i&mindis) { sum++;
index+=bridgelen,&stonenum);
for(i=0;i&lt.将桥看作数组,没有石子的赋值为0,有石子的赋值为12.青蛙跳,由最长距离开始试跳,若无石子则前进,有石子则缩短试跳距离;void main(){i++)
{ scanf(&%d&,&maxdis);
int stone[100];
int sum=0;
int bristone[100]={0};
printf(&quot,直到最小距离为止。若最小距离仍碰到石子,为了编程方便加了些文字说明及桥的情况,可根据需要删除,动态数组不熟练,所以没用思路;i++)
printf(& } else index+=i;
printf(&%d&
貌似效率也不高,只有9%通过了
确实,水平不高,仅供楼主参考
能不能再优化一下?
很久没上知道了,手机看不到追问,这么长时间楼主问题应该解决了,没有的话我也帮不上忙了。
sunlight12346正解,不过还可以优化一下构造一个updateMin函数,功能为,计算青蛙从x开始跳到L所需要踩的石子数,如果结果比当前计算得到的最小数curMin小,则返回计算结果,如果大于等于curMin,则返回curMin,通过递归计算最终的最小值。可以稍作剪枝,如果递归过程中,已踩的石子数stepedStNum已经大于等于curMin,那么就返回curMin,不必要再继续计算下去。 #include &stdio.h&void main() {
int x, s, t, l, curMin, stoneNum, i,
int stoneLoc[100]={0};
int stepedStNum = 0;
printf(&Input the length of bridge:&);
scanf(&%d&,&l);
printf(&Input the range of distance:&);
scanf(&%d%d&,&s,&t);
printf(&Input the number of stone:&);
scanf(&%d&,&stoneNum);
for ( i=0; i&stoneN i++)
scanf(&%d&, &stoneLoc[i]);
curMin = updateMin(x, stepedStNum, s, t, l, stoneLoc, stoneNum, curMin);
printf(&%d&, curMin);}int updateMin(int x, int stepedStNum, int s, int t, int l, int stoneLoc[], int stoneNum, int curMin) {
int i = 0;
if (x &= l)
return stepedStN
for (i=0; i&stoneN i++)
if (stoneLoc[i] == x)
stepedStNum++;
if (stepedStNum &= curMin)
return curM
for (i=t; i&=s; i--)
curMin = updateMin(x+i, stepedStNum, s, t, l, stoneLoc, stoneNum,
return curM}
每分???谁会给你说!!!!
给出解答一定给25+,谢谢!
其他2条回答
为您推荐:
其他类似问题
c语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。【图文】ch5模块化程序设计
C语言 《解析C程序设计》_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
ch5模块化程序设计
C语言 《解析C程序设计》
&&C语言 《解析C程序设计》教程PPT
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 c语言程序设计编程题 的文章

 

随机推荐