问题 A: 满月
时间限制: 1 Sec 内存限制: 128 MB
题目描述
某一天你要去看满月, 但是你发觉月亮只能看到一部分。
现在你看到这些部分全部抽象成平面上的点, 并且这些点只可能是在月亮的中心或者是月亮的边缘上。
现在问你, 月亮可能在什么位置上(就是哪个点可以做月亮的中心)。
输入
第一行一个整数N,表示有多少个点。(N<1000)
下面N行每行两个实数,表示点的坐标。
输出
一行一个整数, 表示读入中的第几个点。
样例输入 Copy
5
0 0
3 4
4 3
-3 4
-4 3
样例输出 Copy
1
/**编译错误:数组越界 除以0**/
/**
计算一个点到其他各个点的距离
如果不相等就退出,换下一个点
直到某个点的距离到其他所有点的距离都相等
**/
int n;
struct node
{
double x;
double y;
}a[1005];
int judge(double x,double y)
{
int cnt = 0;
double k[1005];
memset(k,0,sizeof(k));//数组清零
for(int i=1;i<=n;i++)
{
if(a[i].x == x && a[i].y == y)
continue;
//若传入的点与这个点相同,跳过
else
{
cnt++;
k[cnt] = sqrt((a[i].x-x)*(a[i].x-x) + (a[i].y-y)*(a[i].y-y));
//计算其他点与传入点的距离
if((k[cnt] != k[cnt-1]) && cnt>1)
//判断其他点与传入点之间的距离是否相同,如果不同,说明此点不符合题意
return 0;
}
}
return 1;
}
int main()
{
cin >> n;
for(int i=1;i<=n;i++)
cin >> a[i].x >> a[i].y;
for(int i=1;i<=n;i++)
{
if(judge(a[i].x,a[i].y))
{
printf("%d\n",i);
return 0;
}
}
return 0;
}