第一行输入一个正整数T.表示测试数据组数.
接下来每行输入三个整数A , B和 C.
1<=T<=10001<=A,B<=100-100<=C<=100
每组测试数据输出一个答案.在<1e-4范围内都视为正确输出.
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
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()