【问题标题】:Maximize area of a triangle given n points [closed]给定n个点最大化三角形的面积[关闭]
【发布时间】:2012-01-16 20:21:00
【问题描述】:

当我任意将参数传递给 area 函数时,代码运行完美。但是当我尝试运行循环时给我一个分段错误。给定 n

这是我的代码。

#include<stdio.h>
#include<math.h>
double area(int x,int y,int x1,int y1,int x2,int y2)
{       //Heron's formula
    double a,b,c,s;
    double abc;
    a=sqrt(((x-x1)*(x-x1))+((y-y1)*(y-y1)));
    b=sqrt(((x-x2)*(x-x2))+((y-y2)*(y-y2)));
    c=sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));
    s=(a+b+c)/2;
    abc=sqrt(s*(s-a)*(s-b)*(s-c));
    return(abc);
}
int main(void)
{   

    int n,i,j,k;
    double max=0,z=0;
    scanf("%d",&n);
    int x[100]={},y[100]={};
    for(i=0;i<n;i++)
    {
        scanf("%d %d",&x[i],&y[i]);
    }
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            for(k=j+1;k<n;j++)
            {
                z=area(x[i],y[i],x[j],y[j],x[k],y[k]);
                printf("%lf\n",z);
                if(z>max)
                {
                    max=z;
                }
            }
        }
    }
    //printf("\n%lfoi\n",area(0,0,1,0,1,2));
    printf("%lf",max*2);

}

【问题讨论】:

  • 您很可能在某处越界。尝试隔离问题。您的代码很难按原样阅读。
  • 下次发帖时,请记得检查您的代码格式。总的来说,还不错,我为你修好了,只是一个友好的提醒。

标签: c geometry area maximize


【解决方案1】:

内部循环正在递增j,它可能应该递增k

for(k=j+1;k<n;j++)
              ^
             oops!

【讨论】:

  • 你也一样。我去用纸袋什么的遮住我的脸。
【解决方案2】:

内循环有错误索引:应该是

for(k=j+1;k<n;k++)

而不是

for(k=j+1;k<n;j++)

【讨论】:

  • 我不敢相信我犯了那个错误。我真的很抱歉浪费你的时间。
  • @OleGooner 别这么想,我们是来帮你的,这是一个有趣的练习
  • 花了我一分钟才看到区别:k++ 而不是 j++
【解决方案3】:
for(k=j+1;k<n;j++)

我认为你的意思是在这个循环中增加 k,而不是 j。

【讨论】:

    【解决方案4】:

    你必须增加“k”而不是“j”

     for(k=j+1;k<n;k++)
            { }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2015-07-29
      • 2013-01-12
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多