标题:[讨论]青蛙该怎样过桥?
只看楼主
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
#include <stdio.h>
#include <stdlib.h>
main()
{
int *jump=NULL;
int i,j,k,length,min,max,stone_num,temp,minous,total,counter=0,tag=0,m,n=1,flag=0;
int a[100];
printf("Please input the length of the bridge:\n");
scanf("%d",&length);
jump=(int *)malloc(sizeof(int)*(length+1));
for(i=0;i<length;i++)
*(jump+i)=0;
printf("Please input the minium pace and the maxnium pace:\n");
scanf("%d%*c%d",&min,&max);
printf("Please input the number of the stones:\n");
scanf("%d",&stone_num);
printf("Now enter the place of the stones:\n");
for(i=0;i<stone_num;i++)
{
scanf("%d",&temp);
*(jump+temp)=1;
}
for(i=0;i<min;i++)
*(jump+i)=-1;
if(2*min>max)
for(i=max+1;i<2*min;i++)
*(jump+i)=-1;
for(i=2*min;i<=length-1;i++)
{
for(j=i-max;j<=i-min;j++)
{
if(j<0) continue;
if(*(jump+j)!=-1)
{
if(counter==0)
{
minous=*(jump+j);
counter++;
}
else minous=*(jump+j)>minous?minous:*(jump+j);
}
else tag++;
}
counter=0;
if(tag==max-min+1)
*(jump+i)=-1;
else *(jump+i)+=minous;
tag=0;
}
a[0]=length;
do {
for(k=length-max;k<=length-1;k++)
{
if(*(jump+k)!=-1)
{
if(counter==0)
{
total=*(jump+k);
m=k;
counter++;
}
else if(total>*(jump+k))
{
total=*(jump+k);
m=k;
}
}
}
counter=0;
if(flag==0)
{
printf("%d\n",total);
flag=1;
}
a[n++]=length=m;
} while(m>max);
a[n]=0;
for(i=n;i>=0;i--)
{
if(i!=0)
printf("%d->",a[i]);
else printf("%d",a[i]);
}
free (jump);
getch();
}

OK,搞定了。这个程序就研究到这,花费太多时间了.

对不礼貌的女生收钱......
2006-05-07 08:21
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
还有,版主老大,我帮您测试出错误了
您再看看您的程序,我测试的数据是:
桥长:500
步长:2 9
石头数:10
石头位置:3 4 9 15 26 86 126 158 167 259
虽然时间都是极快,但一个答案是0,一个答案是1;
我看了下,应该是您错了,您再看下,
我不知道怎么上传图片,不好意思,只能这样说了。

对不礼貌的女生收钱......
2006-05-07 08:34



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




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

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