c语言问题过河

Sunlight12346正解,但可以优化。

构造一个updateMin函数,函数的作用是计算青蛙从X跳到l需要踩的石头数,如果结果小于当前计算的最小数curMin,则返回计算结果;如果大于或等于curMin,则返回,并递归计算最终的最小值。你可以修剪一下。如果在递归过程中,踩在stepedStNum上的石头数大于等于curMin,那么就可以返回到curMin,没有必要继续计算。

# include & ltstdio.h & gt

void main()

{

int x,s,t,l,curMin,stoneNum,I,temp

int stone loc[100]= { 0 };

int stepedStNum = 0;

x = 0;

printf("输入桥的长度:");

scanf("%d ",& ampl);

printf("输入距离的范围:");

scanf("%d%d ",& amps & amp;t);

printf("输入石头的数量:");

scanf("%d ",& ampstone num);

for(I = 0;我& ltstoneNumi++)

{

scanf("%d ",& ampstone loc[I]);

}

curMin = l;

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 & gt;= l)

{

return stepedStNum

}

for(I = 0;我& ltstoneNumi++)

{

if (stoneLoc[i] == x)

{

stepedstnum++;

打破;

}

}

if(stepedStNum & gt;= curMin)

{

返回curMin

}

for(I = t;我& gt= s;我-)

{

curMin = updateMin(x+i,stepedStNum,s,t,l,stoneLoc,stoneNum,curMin);

}

返回curMin

}