1084 - 计算面积

小明家刚买了一块地,但是他不知道这块地的面积,因为这块地是由一条抛物线和一条直线围成的。下面的图片展示了这块地的形状。

现在给你抛物线的顶点坐标和抛物线与直线的交点坐标,请你计算这块地的面积。

<img src="http://tk.hustoj.com:80/attached/image/20130606/20130606220005_72661.bmp" alt="" /> 

题目输入

输入的第一行是一个整数t,表示有t组测试数据。
每组输入包含三行,第一行输入P1点的坐标,第二行输入P2点的坐标,第三行输入P3点的坐标。
每个点的坐标由两个浮点数x和y构成。(0.0<=x,y<=1000.0)
题目保证输入中不会出现两点和三点重合的情况。

题目输出

对于每组输入,请输出这块地的面积,结果保留两位小数。

输入/输出样例

题目输入

2
5.000000 5.000000
0.000000 0.000000
10.000000 0.000000
10.000000 10.000000
1.000000 1.000000
14.000000 8.222222

题目输出

33.33
40.69

C语言解答

#include<stdio.h>

int main()
{
	int t;
	float xp1,xp2,xp3,yp1,yp2,yp3;
	double a,k,b,s;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%f%f%f%f%f%f",&xp1,&yp1,&xp2,&yp2,&xp3,&yp3);
		a=(yp2-yp1)/(xp2-xp1)/(xp2-xp1);
		k=(yp2-yp3)/(xp2-xp3);
		b=yp2-(yp2-yp3)/(xp2-xp3)*xp2;
		s=a/3*xp3*xp3*xp3+(-2*a*xp1)/2*xp3*xp3+(a*xp1*xp1+yp1)*xp3-k/2*xp3*xp3-b*xp3-(a/3*xp2*xp2*xp2+(-2*a*xp1)/2*xp2*xp2+(a*xp1*xp1+yp1)*xp2-k/2*xp2*xp2-b*xp2);
		printf("%.2lf\n",s);
	}
	return 0;
}

C++解答

#include<stdio.h>

int main()
{
	int t;
	float xp1,xp2,xp3,yp1,yp2,yp3;
	double a,k,b,s;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%f%f%f%f%f%f",&xp1,&yp1,&xp2,&yp2,&xp3,&yp3);
		a=(yp2-yp1)/(xp2-xp1)/(xp2-xp1);
		k=(yp2-yp3)/(xp2-xp3);
		b=yp2-(yp2-yp3)/(xp2-xp3)*xp2;
		s=a/3*xp3*xp3*xp3+(-2*a*xp1)/2*xp3*xp3+(a*xp1*xp1+yp1)*xp3-k/2*xp3*xp3-b*xp3-(a/3*xp2*xp2*xp2+(-2*a*xp1)/2*xp2*xp2+(a*xp1*xp1+yp1)*xp2-k/2*xp2*xp2-b*xp2);
		printf("%.2lf\n",s);
	}
	return 0;
}
时间限制 1 秒
内存限制 32 MB
讨论 统计
上一题 下一题