请大家帮我看看一看为什么出不来正确结果 c++

来源:百度知道 编辑:UC知道 时间:2024/05/21 10:10:20
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int i,n,j,q,k;
float a[200];
double b[200],c[20000];
cin>>n;
for(i=0;i<2*n;i=i+2)
{
scanf("%f%f",&a[i],&a[i+1]);
b[i]=a[i],b[i+1]=a[i+1];
}
for(i=0;i<n*2;i=i+2)
for(j=0,k=0;j<n*2,k<n*n;j=j+2,k++)
{
if(b[i]<-999||b[i+1]<-999||b[j]<-999,b[j+1]-999)
continue;
c[k]=sqrt(pow((b[i]-b[j]),2)+pow((b[i+1]-b[j+1]),2));
}
for(q=0;q<n*n;q++)
{
if(c[0]<c[q])
c[0]=c[q];
}
printf("%.4f\n",c[0]);
return 0;
}

Description
给定一组点(x,y),求距离最远的两个点之间的距离。

Input
第一行是点数n(n大于等于2)
接着每一行代表一个点,由两个浮点数x y组成。

Output
输出一行是最远两点之间的距离。
使用printf("%.4f\n", dis)输出距离值并精确到小数点后4位。

Sample Input

6
34.0 23.0
28.1 21.6<

for(j=0,k=0;j<n*2,k<n*n;j=j+2,k++) 这句话有问题,会导致j的值超过2×n,改成如下就可以了
int i,n,j,q,k=0;
float a[200];
double b[200],c[20000];
cin>>n;
for(i=0;i<2*n;i=i+2)
{
scanf("%f%f",&a[i],&a[i+1]);
b[i]=double(a[i]),b[i+1]=double(a[i+1]);
}
for(i=0;i<n*2;i=i+2)
for(j=0;j<n*2;j=j+2)
{
if(b[i]<-999||b[i+1]<-999||b[j]<-999||b[j+1]<-999)
continue;
c[k]=sqrt(pow(fabs(b[i]-b[j]),2)+pow(fabs(b[i+1]-b[j+1]),2));
k++;
}

注意先将k初始化为0

补充:
for(j=0,k=0;j<n*2,k<n*n;j=j+2,k++) 这句话有问题,会导致j的值超过2×n 可为什么超出了就有问题呢 谢谢啦 我知道会越界出错 但那不是会是一个很大的负数吗 我已经排除了负数
首先,你没有排除负数,越界后的负数不是小于-999的,而是其他的未知的负数,你不能用这种方式排除。

j的值超过了2*n会导致数组越界,出错……