题意整理。

  • 已知圆形和正方形的周长。
  • 求对应的圆形和正方形的面积。

方法一(数学计算)

1.解题思路

  • 首先利用父类构造函数初始化周长。
  • 对于圆形,由于圆的周长为s=2PIrs=2*PI*r,圆的面积为area=PIrrarea=PI*r*r,所以面积为area=ss/(4PI)area=s*s/(4*PI)
  • 对于正方形,由于正方形的周长为s=4ls=4*l,正方形的面积为area=llarea=l*l,所以面积为area=ss/16area=s*s/16

图解展示: alt

2.代码实现

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextDouble()) {
            double s = scanner.nextDouble();
            // Circle和Square是需要你定义的类
            System.out.println(String.format("%.3f",new Circle(s).getArea()));
            System.out.println(String.format("%.3f", new Square(s).getArea()));
        }
    }

}

class Shape {

    private double s; // 周长

    public Shape(double s) {
        this.s = s;
    }

    public double getS() {
        return s;
    }

}

interface Area {
    double getArea(); // 面积
}

// 圆形
class Circle extends Shape implements Area {
    
    //利用父类构造函数初始化周长
    Circle(double s){
        super(s);
    }

    //圆的周长为s=2*PI*r,圆的面积为PI*r*r,所以面积为s*s/(4*PI)
    public double getArea(){
        return getS()*getS()/(4*Math.PI);
    }

}

// 方形
class Square extends Shape implements Area {
    
    //利用父类构造函数初始化周长
    Square(double s){
        super(s);
    }
        
    //正方形的周长为s=4*l,正方形的面积为l*l,所以面积为s*s/16
    public double getArea(){
        return getS()*getS()/16;
    }

}

3.复杂度分析

  • 时间复杂度:只需一次计算,所以时间复杂度为O(1)O(1)
  • 空间复杂度:不需要额外的空间,所以空间复杂度为O(1)O(1)