标题:[讨论]青蛙该怎样过桥?
只看楼主
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 

我的程序还没弄好呢,那个程序在蛙步范围是两个连续整数的时候,才是正确的!
其余的,可以改成循环变通一下,
不知怎么搞的,我改了老半天,在测试的时候都没有成功,
恳请楼主和版主帮我改改,谢了


对不礼貌的女生收钱......
2006-05-04 13:26
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
得分:0 

我一会有事,白天没时间,我等晚上的吧,我写的那个很好改,等晚上改了速度就快了

你的先自己看


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-04 13:30
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
恩,我也正在查啊,不过现在累啊,想睡觉,早上4点多就醒了.


对不礼貌的女生收钱......
2006-05-04 13:34
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
以下是引用soft_wind在2006-5-4 13:34:00的发言:
恩,我也正在查啊,不过现在累啊,想睡觉,早上4点多就醒了.

都被我害的,嗨嗨!


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-04 13:38
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 

哈哈,总算让我找到错误啦!!
#include <stdio.h>
/*
函数功能:递归计算青蛙踩到石子的总数。
函数入口:对调后的石头位置,石头总数,最短步长,最大步长,桥的总长。
函数出口:返回青蛙踩到石子的总数。
特别注意:该函数的处理是颠倒处理,即已经把终点看成起点,起点看成终点。
*/
int findway(int a[],int num,int min,int max,int len)
{
int count1=0,count2=0,s=0,q=0,j;
if(len<=max) /*如果最大步长大于等于桥的总长,则无须踩到石子*/
return 0; /*递归出口*/
else /*处理步长小于桥长的情况*/
{
for(j=0;j<num;j++) /*青蛙挑一步,循环判断青蛙是否跳到石头的地方*/
{
if(a[j]!=len-min) /*小步长的处理*/
s++; /*如果没跳着,就加1*/
if(a[j]!=len-max) /*大步长的处理*/
q++; /*如果没跳着,加1*/
}
/*
如果跳着石头的地方,count加1,然后递归计算总跳到的石头数
*/
s!=num?(count1=1+findway(a,num,min,max,len-min)):(count1=findway(a,num,min,max,len-min));
q!=num?(count2=1+findway(a,num,min,max,len-max)):(count2=findway(a,num,min,max,len-max));
return count1>count2?count2:count1; /*函数出口,返回跳到石头数最小的数*/
}
}
main()
{
int length,minpace,maxpace,stone_num,st_place,i,k,m,n;
int aplace[20];

/*
输入数据
*/
printf("Please input the length of the bridge:");
scanf("%d",&length);
printf("Now enter the min pace and the max pace:");
scanf("%d%*c%d",&minpace,&maxpace);
printf("Input the number of the stones:");
scanf("%d",&stone_num);
printf("The places of the stone:");
for (i=0;i<stone_num;i++)
scanf("%d",&aplace[i]);

/*
为方便函数处理,把起点也终点对换。
*/
for (i=0;i<stone_num;i++)
aplace[i]=length-aplace[i];
printf("OK,loading- - - -\n");
/*
打印出结果。
*/
for(i=0;i<maxpace-minpace;i++)   /*晕死!应该是两道循环,我竟然没发现!*/
for(k=0;k<maxpace-minpace;k++)

{
if(k==0&&i==0)
m=findway(aplace,stone_num,k+minpace,k+1+minpace,length);
else if(i!=k)
m=m>(n=findway(aplace,stone_num,i+minpace,k+1+minpace,length))?n:m;
}
printf("%d",m);
getch();

}


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

呵呵,没,我也是今天才看到这题的,
昨天很早就下了,
晚上我们学校机房又不开门。


对不礼貌的女生收钱......
2006-05-04 14:01
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
得分:0 

我下了,你还得改~~ 因为我运行了一组数据算了一年还没算出来


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-04 14:02
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
恩,那是,效率很低啊,不过,如果我得改的话,估计是得改整个算法了,我这个算法本身做得循环和递归演算够多的。哎!再想想……

对不礼貌的女生收钱......
2006-05-04 14:04
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 

25楼:您的程序很奇怪。在下列数据下,运行极快:
50
3 7
10
2 3 5 7 11 17 23 29 37 43而在下列数据下,运行极慢100
2 3
10
7 19 29 37 47 59 71 79 89 97
------------------------------------------------
why?


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-04 14:13
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
先告诉我答案是不是正确的啊?

对不礼貌的女生收钱......
2006-05-04 14:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-61745-1-1.html




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

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