杭电acm 1007题被Compilation Error

#include<stdio.h>#include<stdlib.h>#include<math.h>structPoint{doublex,y;}arrP[99999]... #include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct Point
{
double x,y;
}arrP[99999],arrX[99999],arrY[99999];
int compx(const void *a,const void *b)
{
if(((struct Point *)a)->x==((struct Point *)b)->x)
return ((struct Point *)a)->y<((struct Point *)b)->y?1:-1;
return ((struct Point *)a)->x<((struct Point *)b)->x?1:-1;
}
int compy(const void *a,const void *b)
{
if(((struct Point *)a)->y==((struct Point *)b)->y)
return ((struct Point *)a)->x<((struct Point *)b)->x?1:-1;
return ((struct Point *)a)->y<((struct Point *)b)->y?1:-1;
}
double GetDistance(struct Point a,struct Point b)
{
return sqrt(pow(a.x-b.x,2.0)+pow(a.y-b.y,2.0));
}
double MinDistance(double a,double b)
{
return a<=b?a:b;
}
double GetMinDistance(int l,int r)
{
if(l==r)
return 0;
else if(l+1==r)
return GetDistance(arrP[l],arrP[r]);
else if(l+2==r)
{
double tmp1=GetDistance(arrP[l],arrP[l+1]);
double tmp2=GetDistance(arrP[l],arrP[r]);
double tmp3=GetDistance(arrP[r],arrP[l+1]);
return MinDistance(MinDistance(tmp1,tmp2),tmp3);
}
int middle,j,k,i;
middle=(l+r)/2;j=0;k=0;
double minDistance=MinDistance(GetMinDistance(l,middle),GetMinDistance(middle,r));
for(i=l;i<=r;i++)
{
if(fabs(arrP[i].x-arrP[middle].x)<minDistance)
arrX[j++]=arrP[i];
}
qsort(arrX,j,sizeof(struct Point),compy);
middle=(j+1)/2;
for(i=0;i<j;i++)
{
if(fabs(arrX[i].y-arrX[middle].y)>minDistance)
arrY[k++]=arrX[i];
}
for(i=0;i<k;i++)
for(j=i+1;j<k;j++)
{
double tmpDistance=GetDistance(arrY[i],arrY[j]);
if(tmpDistance<minDistance)
minDistance=tmpDistance;
}
return minDistance;
}
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF&&n)
{
//Point p;
for(i=0;i<n;i++)
scanf("%lf%lf",&arrP[i].x,&arrP[i].y);
qsort(arrP,n,sizeof(struct Point),compx);
double minDistance;
minDistance=GetMinDistance(0,n-1);
printf("%.2lf\n",minDistance/2);
}
return 0;
}

Compilation Error
0_0_10372321_11217.c
0_0_10372321_11217.c(41) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
0_0_10372321_11217.c(42) : error C2065: “middle” : 未声明的标识符
0_0_10372321_11217.c(42) : error C2065: “j” : 未声明的标识符
0_0_10372321_11217.c(42) : error C2065: “k” : 未声明的标识符
0_0_10372321_11217.c(43) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
0_0_10372321_11217.c(44) : error C2065: “i” : 未声明的标识符
0_0_10372321_11217.c(46) : error C2065: “minDistance” : 未声明的标识符
0_0_10372321_11217.c(74) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
展开
 我来答
CK_solo_
2014-03-23 · TA获得超过291个赞
知道小有建树答主
回答量:404
采纳率:0%
帮助的人:256万
展开全部
你用c++交交看。c的编译器好像不允许你在中间定义变量( int middle,j,k,i;),要在该函数的最上面。if(l==r)
return 0;的前面
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式