列表

详情


CPP39. 点和圆的关系

描述

有圆类(Circle)和点类(Pointer),请在圆类中实现一个 isPointerInCircle方法,该方法传入一个点类对象,判断点和圆的关系,并在该方法中输出。
点类(Pointer):
        成员变量:x轴坐标(int x)  y轴坐标(int y)
        成员方法:成员变量的公共访问方法
圆类(Circle):
        成员变量:圆心(Point center)  半径(int radius)
        成员方法:成员变量的公共访问方法    判断点和圆关系的方法(isPointerInCircle
点和圆的关系:
        1.点在圆外
        2.点在圆上
        3.点在圆内

输入描述

键盘输入两个整数,分别是点的 x 坐标和 y 坐标(圆的参数已经给定)

输出描述

圆类中实现 isPointInCircle 方法,在该方法中输出点和圆的关系,
如果点在圆外,则输出“out”;
如果点在圆上,则输出“on”;
如果点在圆内,则输出“in”。

示例1

输入:

5
5

输出:

on

示例2

输入:

3
4

输出:

in

示例3

输入:

10
10

输出:

out

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 324KB, 提交时间: 2022-07-02

#include <iostream>
using namespace std;

// 点类
class Pointer {

    private:
        int x;  // x 坐标
        int y;  // y 坐标

    public:
        void setX(int x) {
            this->x = x;
        }

        int getX() {
            return x;
        }

        void setY(int y) {
            this->y = y;
        }

        int getY() {
            return y;
        }

};

// 圆类
class Circle {

    private:
        Pointer center; // 圆心
        int radius; // 半径

    public:
        void setCenter(int x, int y) {
            center.setX(x);
            center.setY(y);
        }

        void setRadius(int radius) {
            this->radius = radius;
        }

        // write your code here......
        void isPointerInCircle(Pointer &p){
            int d = (p.getX() - center.getX()) * (p.getX() - center.getX()) + (p.getY() - center.getY()) * (p.getY() - center.getY());
            int r = radius * radius;
            if (d < r) cout << "in" << endl;
            else if(d == r) cout << "on" << endl;
            else cout << "out" <<endl;
        }

};

int main() {

    // 键盘输入点的坐标
    int x, y;
    cin >> x;
    cin >> y;

    // 创建一个点
    Pointer p;
    p.setX(x);
    p.setY(y);

    // 创建一个圆
    Circle c;
    c.setCenter(5, 0);
    c.setRadius(5);

    // 判断点和圆的关系
    c.isPointerInCircle(p);

    return 0;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 392KB, 提交时间: 2022-04-17

#include <iostream>
#include<cmath>
using namespace std;

// 点类
class Pointer {

    private:
        int x;  // x 坐标
        int y;  // y 坐标

    public:
        void setX(int x)
        {
            this->x = x;
        }

        int getX()
        {
            return x;
        }

        void setY(int y)
        {
            this->y = y;
        }

        int getY() 
        {
            return y;
        }

};

// 圆类
class Circle {

    private:
        Pointer center; // 圆心
        int radius; // 半径

    public:
        void setCenter(int x, int y)
        {
            center.setX(x);
            center.setY(y);
        }

        void setRadius(int radius)
        {
            this->radius = radius;
        }

        // write your code here......
       void isPointerInCircle(Pointer p)
       {
           int length = sqrt((p.getX() - this->center.getX()) * (p.getX() - this->center.getX()) + \
               (p.getY() - this->center.getY()) *(p.getY() - this->center.getY()));
           
           if(length == this->radius)
           {
               cout<<"on"<<endl;
           }
           else if(length > this->radius)
           {
               cout<<"out"<<endl;
           }else
           {
               cout<<"in"<<endl;
           }
           
       }

};

int main() {

    // 键盘输入点的坐标
    int x, y;
    cin >> x;
    cin >> y;

    // 创建一个点
    Pointer p;
    p.setX(x);
    p.setY(y);

    // 创建一个圆
    Circle c;
    c.setCenter(5, 0);
    c.setRadius(5);

    // 判断点和圆的关系
    c.isPointerInCircle(p);

    return 0;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 392KB, 提交时间: 2021-10-23

#include <iostream>
using namespace std;

// 点类
class Pointer {
 
private:
    int x;  // x 坐标
    int y;  // y 坐标
 
public:
    void setX(int x) {
        this->x = x;
    }
 
    int getX() {
        return x;
    }
 
    void setY(int y) {
        this->y = y;
    }
 
    int getY() {
        return y;
    }
 
};
 
// 圆类
class Circle {
 
private:
    Pointer center;    // 圆心
    int radius;    // 半径
 
public:
    void setCenter(int x, int y) {
        center.setX(x);
        center.setY(y);
    }
 
    void setRadius(int radius) {
        this->radius = radius;
    }
 
    void isPointerInCircle(Pointer& point) {
        // 计算点和圆心的距离
        int distance = (point.getX() - center.getX()) * (point.getX() - center.getX())
            + (point.getY() - center.getY()) * (point.getY() - center.getY());
 
        int r = radius * radius;
 
        if (distance < r) {
            cout << "in" << endl;
        }
        else if (distance == r) {
            cout << "on" << endl;
        }
        else {
            cout << "out" << endl;
        }
 
    }
};
 
int main() {
 
    // 键盘输入点的坐标
    int x, y;
    cin >> x;
    cin >> y;
 
    // 创建一个点
    Pointer p;
    p.setX(x);
    p.setY(y);
 
    // 创建一个圆
    Circle c;
    c.setCenter(5, 0);
    c.setRadius(5);
 
    // 判断点和圆的关系
    c.isPointerInCircle(p);
 
    return 0;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 396KB, 提交时间: 2021-12-21

#include <iostream>
using namespace std;

// 点类
class Pointer {

    private:
        int x;  // x 坐标
        int y;  // y 坐标

    public:
        void setX(int x) {
            this->x = x;
        }

        int getX() {
            return x;
        }

        void setY(int y) {
            this->y = y;
        }

        int getY() {
            return y;
        }

};

// 圆类
class Circle {

    private:
        Pointer center; // 圆心
        int radius; // 半径

    public:
        void setCenter(int x, int y) {
            center.setX(x);
            center.setY(y);
        }

        void setRadius(int radius) {
            this->radius = radius;
        }

        // write your code here......
        void isPointerInCircle(Pointer& point){
            int distance=(point.getX()-center.getX())*(point.getX()-center.getX())+(point.getY()-center.getY())*(point.getY()-center.getY());
            int r=radius*radius;
            if(distance < r){
                cout<<"in"<<endl;
            }
            else if (distance==r){
                cout<<"on"<<endl;
            }
            else{
                cout<<"out"<<endl;
            }
        }

};

int main() {

    // 键盘输入点的坐标
    int x, y;
    cin >> x;
    cin >> y;

    // 创建一个点
    Pointer p;
    p.setX(x);
    p.setY(y);

    // 创建一个圆
    Circle c;
    c.setCenter(5, 0);
    c.setRadius(5);

    // 判断点和圆的关系
    c.isPointerInCircle(p);

    return 0;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 396KB, 提交时间: 2021-12-05

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

// 点类
class Pointer {

    private:
        int x;  // x 坐标
        int y;  // y 坐标

    public:
        void setX(int x) {
            this->x = x;
        }

        int getX() {
            return x;
        }

        void setY(int y) {
            this->y = y;
        }

        int getY() {
            return y;
        }

};

// 圆类
class Circle {

    private:
        Pointer center; // 圆心
        int radius; // 半径

    public:
        void setCenter(int x, int y) {
            center.setX(x);
            center.setY(y);
        }

        void setRadius(int radius) {
            this->radius = radius;
        }

        // write your code here......
        void isPointerInCircle(Pointer p){
            int len=pow(p.getX()-this->center.getX(),2)+pow(p.getY()-this->center.getY(),2);
            if(len>pow(radius,2))
                cout<< "out";
            else if(len==pow(radius,2))
                cout<< "on";
            else
                cout<< "in";
        }

};

int main() {

    // 键盘输入点的坐标
    int x, y;
    cin >> x;
    cin >> y;

    // 创建一个点
    Pointer p;
    p.setX(x);
    p.setY(y);

    // 创建一个圆
    Circle c;
    c.setCenter(5, 0);
    c.setRadius(5);

    // 判断点和圆的关系
    c.isPointerInCircle(p);

    return 0;
}

上一题