首页 > 试题广场 >

封闭图形的面积(技术研究卷)

[编程题]封闭图形的面积(技术研究卷)
  • 热度指数:2213 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解

求抛物线 = 与直线 = + 所围成的封闭图形面积.若图形不存在,则输出



输入描述:

第一行输入一个正整数T.表示测试数据组数.

接下来每行输入三个整数A , B和 C.

1<=T<=1000
1<=A,B<=100

-100<=C<=100




输出描述:
每组测试数据输出一个答案.在<1e-4范围内都视为正确输出.
示例1

输入

1
1 1 -6

输出

31.2481110540
#微分法,可以用来求不好算积分的曲线,精度由dy控制
import math
while True:
    try:
        T=int(input())
        for _ in range(T):
            A,B,C=list(map(int,input().split()))
            
            a=B*B
            b=2*B*C-2*A
            c=C*C
            dt=b*b-4*a*c

            if dt<=0:
                print(0)
                
            else :
                x1=(-b-math.sqrt(dt))/(2*a)
                x2=(-b+math.sqrt(dt))/(2*a)
                y1=B*x1+C
                y2=B*x2+C
                
                # 微分法
                dy=0.01
                # y_list = [i*dy for i in range(math.floor(y1/dy),math.ceil(y2/dy))]
                def y_generator(y1,y2,dy):
                    for i in range(math.floor(y1/dy),math.ceil(y2/dy)):
                        yield i*dy 
                y_list = y_generator(y1,y2,dy)
                
                ans=0
                for y in y_list:
                    d = abs(((y-C)/B)-(y*y)/(2*A))
                    ans+=d
                print(ans*dy)
            
    except: break
        

发表于 2022-10-16 03:22:37 回复(0)

from scipy.integrate import quad
from sympy import *
from sympy.core.add import add

def area_compute():
    t = int(input('输入次数t:'))
    while t:
        t -= 1
        A,B,C = map(float,(input('输入三个数:').split()))
        
        def func(x):
            y1 = x ** 2 / 2 / A
            y2 = (x - C) / B
            return y2 - y1

        x = symbols('x')
        expre = x ** 2 / 2 / A - (x - C) / B
        res = solve(expre, x)  # 计算两线交点
        if isinstance(res[0], Add):  # 解为复数
            print(0)
            continue
        elif len(res)==1:   # 只有一个解
            print(0)
            continue
        else:
            fA,err = quad(func,res[0],res[1])   # 用定积分求包含部分的面积
            print(fA)

area_compute()


编辑于 2021-07-13 15:33:18 回复(0)