楼主修改后的简洁多了.. 看懂了.
应该这里要改.
if i=n then
l:=l+sqrt(sqr(a[i]-a[i+1])+sqr(b[i]-b[i+1]));
改正如下.
if i=n then
l:=l+sqrt(sqr(a[i]-a[1])+sqr(b[i]-b[1]));
这就能通过了..
望采纳,谢谢.
有位伟大的牛说过 这个世界上最抑郁的是让一个人看别人的程序、还是错的程序....
问题在这一句
for i:=2 to ((n div 2)+1) do 你为什么从2开始呢?
这个for循环应该从第一个点到第二点的距离开始算,一直算到第n-1到第n个点,然后再用
c:=sqrt(sqr(a[2*i]-a[2*n-1])+sqr(a[2*i+1]-a[2*n]))计算第n个点到第一个点的值不是么?
你现在从第二个点开始算就漏掉了第一个点(0,0)到第二点(2,0)间的距离2啊!
结论:循环没有控制好,改为
for i:=1 to ((n div 2)+1) do
你的π错了它是3.141592654 还有你把那些专业用词都写错了 要求改正后在出题
我来告诉楼主正解:
这道题是求二维凸包的题目而不是单纯的加上每两个钉子距离的题目,我可以给你发反例图,也可以给你详细解答。具体情况用百度hi找我吧,