Problem C: 点在圆内吗?

Description

定义一个Point类和Circle类,用于判断给定的一系列的点是否在给定的圆内。

其中,Point类:

1.有2个成员x和y,分别为其横坐标和纵坐标;1个静态成员numOfPoints,用于计算生成的点的个数。

2.具有构造函数、析构函数和拷贝构造函数,具体格式输出根据样例自行判断。

3. 具有静态方法int getNumOfPoints(),用于返回numOfPoints的值。

4. 具有int getX()和int getY()方法,用于获取横坐标和纵坐标。

Circle类:

1. 拥有Point类的对象center,表示圆心坐标。拥有radius对象,表示圆的半径;1个静态成员numOfCircles,用于指示生成了多少个圆对象。

2. 具有构造函数、析构函数和拷贝构造函数,具体格式根据样例自行判断。

3.具有静态方法int getNumOfCircles(),返回numOfCircles的值。

4. 具有getCenter()方法,返回圆心坐标。注意:根据输出结果判断返回值类型。

5. 具有bool pointInCircle(Point &)方法,用于判断给定的点是否在当前圆内。是则返回true,否则返回false。

Input

输入分多行。

第一行M>0,表示有M个测试用例。

每个测试用例又包括多行。第1行包含3个整数,分别为一个圆的横坐标、纵坐标和半径。第2行N>0,表示之后又N个点,每个点占一行,分别为其横坐标和纵坐标。

所有输入均为整数,且在int类型范围内。

Output

输出见样例。注意:在圆的边上的点,不在圆内。

Sample Input

20 0 1032 211 1110 01 1 2032 21 1100 100

Sample Output

The Point (0, 0) is created! Now, we have 1 points.The Point (1, 1) is created! Now, we have 2 points.A circle at (1, 1) and radius 1 is created! Now, we have 1 circles.We have 2 points and 1 circles now.The Point (0, 0) is created! Now, we have 3 points.A Point (0, 0) is copied! Now, we have 4 points.A Point (0, 0) is copied! Now, we have 5 points.A circle at (0, 0) and radius 10 is created! Now, we have 2 circles.A Point (0, 0) is erased! Now, we have 4 points.The Point (2, 2) is created! Now, we have 5 points.(2, 2) is in the circle at (0, 0).The Point (11, 11) is created! Now, we have 6 points.(11, 11) is not in the circle at (0, 0).The Point (10, 0) is created! Now, we have 7 points.(10, 0) is not in the circle at (0, 0).A Point (0, 0) is erased! Now, we have 6 points.A circle at (0, 0) and radius 10 is erased! Now, we have 1 circles.A Point (0, 0) is erased! Now, we have 5 points.The Point (1, 1) is created! Now, we have 6 points.A Point (1, 1) is copied! Now, we have 7 points.A Point (1, 1) is copied! Now, we have 8 points.A circle at (1, 1) and radius 20 is created! Now, we have 2 circles.A Point (1, 1) is erased! Now, we have 7 points.The Point (2, 2) is created! Now, we have 8 points.(2, 2) is in the circle at (1, 1).The Point (1, 1) is created! Now, we have 9 points.(1, 1) is in the circle at (1, 1).The Point (100, 100) is created! Now, we have 10 points.(100, 100) is not in the circle at (1, 1).A Point (1, 1) is erased! Now, we have 9 points.A circle at (1, 1) and radius 20 is erased! Now, we have 1 circles.A Point (1, 1) is erased! Now, we have 8 points.We have 8 points, and 1 circles.A circle at (1, 1) and radius 1 is erased! Now, we have 0 circles.A Point (1, 1) is erased! Now, we have 7 points.A Point (0, 0) is erased! Now, we have 6 points.

HINT

Append Code



#include <iostream>

using namespace std;
class Point
{
private:
    int x,y;
    static int numOfPoints;
public:
    Point(int _x = 0,int _y = 0)
    {
        x = _x;
        y = _y;
        numOfPoints++;
        cout << "The Point ("<< x <<", "<< y <<") is created! Now, we have "<< numOfPoints <<" points." << endl;
    }
    Point(const Point &k)
    {
        x = k.x;
        y = k.y;
        numOfPoints++;
        cout << "A Point ("<< x <<", "<< y <<") is copied! Now, we have "<< numOfPoints <<" points." << endl;
    }
    static int getNumOfPoints()
    {
        return numOfPoints;
    }
    int getX()
    {
        return x;
    }
    int getY()
    {
        return y;
    }
    ~Point()
    {
        numOfPoints--;
        cout << "A Point ("<< x <<", "<< y <<") is erased! Now, we have "<< numOfPoints <<" points." << endl;
    }
};
int Point::numOfPoints = 0;
class Circle
{
private:
    Point center;
    static int numOfCircles;
    int radius;
public:
    Circle(int _x,int _y,int _r):center(_x,_y)
    {
        radius = _r;
        numOfCircles++;
        cout << "A circle at ("<< center.getX() <<", "<< center.getY() <<") and radius "<< radius <<" is created! Now, we have "<< numOfCircles <<" circles." << endl;
    }
    Circle(Point _c,int _r):center(_c)
    {
        radius = _r;
        numOfCircles++;
         cout << "A circle at ("<< center.getX() <<", "<< center.getY() <<") and radius "<< radius <<" is created! Now, we have "<< numOfCircles <<" circles." << endl;
    }
    Circle(const Circle &k)
    {
        center = k.center;
        numOfCircles++;
        cout << "A circle at ("<< center.getX() <<", "<< center.getY() <<") and radius "<< radius <<" is copied! Now, we have "<< numOfCircles <<" circles." << endl;
    }
    Point& getCenter()
    {
        return center;
    }
    bool  pointInCircle(Point &k)
    {
        int d = (center.getX() - k.getX()) * (center.getX() - k.getX()) + (center.getY() - k.getY()) * (center.getY() - k.getY());
        return d < radius ? true : false;
    }
    static int getNumOfCircles()
    {
        return numOfCircles;
    }
    ~Circle()
    {
        numOfCircles--;
        cout << "A circle at ("<< center.getX() <<", "<< center.getY() <<") and radius "<< radius <<" is erased! Now, we have "<< numOfCircles <<" circles." << endl;
    }
};
int Circle::numOfCircles = 0;
int main()
{
    int cases,num;
    int x, y, r, px, py;
    Point aPoint(0,0), *bPoint;
    Circle aCircle(1,1,1);
    cin>>cases;
    cout<<"We have "<<Point::getNumOfPoints()<<" points and "<<Circle::getNumOfCircles()<<" circles now."<<endl;
    for (int i = 0; i < cases; i++)
    {
        cin>>x>>y>>r;
        bPoint = new Point(x,y);
        Circle circle(*bPoint, r);
        cin>>num;
        for (int j = 0; j < num; j++)
        {
            cin>>px>>py;
            if (circle.pointInCircle(*(new Point(px, py))))
            {
                cout<<"("<<px<<", "<<py<<") is in the circle at (";
                cout<<circle.getCenter().getX()<<", "<<circle.getCenter().getY()<<")."<<endl;
            }
            else
            {
                cout<<"("<<px<<", "<<py<<") is not in the circle at (";
                cout<<circle.getCenter().getX()<<", "<<circle.getCenter().getY()<<")."<<endl;
            }
        }
        delete bPoint;
    }
    cout<<"We have "<<Point::getNumOfPoints()<<" points, and "<<Circle::getNumOfCircles()<<" circles."<<endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值