建议你先运行斑竹的程序,并设法略加修改,让我们看到青蛙最终过桥的细节。
您是要知道整个青蛙过河其跳到的步子的各个数轴坐标?
对不礼貌的女生收钱......
你的程序有个硬伤,就是只能运行桥长较小的情况,根据题目要求
桥最长10^9 不管你malloc还是用链表,显然这很难满足
我的程序我稍微修改了下,你给的那组数据运行花了0.000秒
[CODE]
#include "stdio.h"
#include "malloc.h"
#include "time.h"
long num_min=0,bridge_len,*array,stone_sum;
int min,max;
int Search(long i)
{
long j;
for(j=0;j<stone_sum && i>=array[j];j++)
;
return j-1;
}
void Frog_Jump(long i,long total)
{
int j;
long num,k;
for(j=min;j<=max;j++)
{
num=total;
k=Search(i+j);
if( k<stone_sum-1 )
{
if(k>=0 && array[k]==i+j)
num=total+1;
if( array[k+1]-i-j>=min+max%min)
{
Frog_Jump(array[k+1]-min-max%min,num);
break;
}
else
Frog_Jump(i+j,num);
}
else
{
if(array[k]==i+j)
num=total+1;
if( num<num_min)
num_min=num;
}
}
}
int main()
{
long i,start,end;
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);
start=clock();
if(max==min)
{
for(i=0;i<stone_sum;i++)
if(array[i]%max==0)
num_min++;
}
else
{
num_min=stone_sum;
Frog_Jump(0,0);
}
printf("\n%ld\n",num_min);
free(array);
end=clock();
printf("The computation took %0.3f seconds.\n",(end-start)/1000.0);
return 0;
}
[/CODE]