问题 D: Point_Array
时间限制: 1 Sec 内存限制: 128 MB
题目描述
上面是我们曾经练习过的一个习题,请在原来代码的基础上作以下修改:1、增加自写的拷贝构造函数;2、增加自写的析构函数;3、将getDisTo方法的参数修改为getDisTo(const Point &p);4、根据下面输出的内容修改相应的构造函数。
然后在主函数中根据用户输入的数目建立Point数组,求出数组内距离最大的两个点之间的距离值。
输入
测试数据的组数 t
第一组点的个数
第一个点的 x 坐标 y坐标
第二个点的 x坐标 y坐标
…
输出
输出第一组距离最大的两个点以及其距离
…
在C++中,输出指定精度的参考代码如下:
#include
#include //必须包含这个头文件
using namespace std;
void main( )
{ double a =3.141596;
cout<<fixed<<setprecision(3)<<a<<endl; //输出小数点后3位
样例输入
2
4
0 0
5 0
5 5
2 10
3
-1 -8
0 9
5 0
样例输出
Constructor.
Constructor.
Constructor.
Constructor.
The longeset distance is 10.44,between p[1] and p[3].
Distructor.
Distructor.
Distructor.
Distructor.
Constructor.
Constructor.
Constructor.
The longeset distance is 17.03,between p[0] and p[1].
Distructor.
Distructor.
Distructor.
#include<iostream>
#include<string>
#include<math.h>
#include<iomanip>
using namespace std;
class Point {
double x, y;
public:
Point()
{
cout << "Constructor." << endl;
x = y = 0;
}
~Point()
{
cout << "Distructor." << endl;
}
Point(double x, double y)
{
this->x = x;
this->y = y;
}
Point(const Point& p)
{
x = p.x;
y = p.y;
}
double getX()
{
return x;
}
double gexY()
{
return y;
}
void setxy(double x, double y)
{
this->x = x;
this->y = y;
}
void setx(double x)
{
this->x = x;
}
void sety(double y)
{
this->y = y;
}
double getdis(const Point& p)
{
return sqrt(pow(x - p.x, 2) + pow(y - p.y, 2));
}
};
int main()
{
int t;
cin >> t;
while (t--)
{
int num;
cin >> num;
Point* p = new Point[num];
for (int i = 0; i < num; ++i)
{
int x, y;
cin >> x >> y;
p[i].setxy(x, y);
}
double maxdis = -1.0;
int flag1, flag2;
for (int i = 0; i < num - 1; ++i)
{
for (int j = i + 1; j <= num; ++j)
{
if (p[i].getdis(p[j]) > maxdis)
{
maxdis = p[i].getdis(p[j]);
flag1 = i, flag2 = j;
}
}
}
cout << "The longeset distance is " << fixed << setprecision(2) << maxdis << ",between p[" << flag1 << "] and p[" << flag2 << "]." << endl;
delete[]p;
}
return 0;
}