对不礼貌的女生收钱......
#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;
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");
/*
打印出结果。
*/
printf("%d",findway(aplace,stone_num,minpace,maxpace,length));
getch();
}
这个程序不知道对不?我只检验了楼主的数据,是对的,但别的数据不好检验,请楼主帮忙看下.