ZOJ Problem Set

这道题目说白了是一道平面几何的数学问题,重在理解题目的意思:

题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为x轴,平分半圆为y轴,建立如下图的坐标系

问题:给出坐标点(y>0),让你判断在那一年这个坐标点会被淹没。

解决方案:我们可以转换成的数学模型是来比较坐标点到原点的距离与半圆半径的大小即可知道该点是否被淹没,公式如下:

1.由于每年半圆面积增长50平方英里,可得半径递推公式R2=sqrt(100/pi+R1*R1) 注:初始R1设置为0,则把最开始情况包括进去。

2.计算机坐标到原点的距离,就是勾股定理:distance=sqrt(x*x+y*y)

3.最后将两者进行比较:R2<distance 注:这里用小于号,因为题目要求点在边界不算淹没。

4.由于比较时两边都有开根号,那我们直接比较两者的平方即可,省去sqrt。(注:这里应该有个精度的问题,我开始用了sqrt,zoj里A不过,后来去掉过了)

代码如下:

#include <stdio.h>
#include <math.h>
#define pi 3.141592653

int main()
{
	double r1=0,r2,x,y;
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lf%lf",&x,&y);
		double distance=x*x+y*y;
		int year=1;

		for(r1=0;r2=(100/pi+r1*r1),r2<distance;r1=sqrt(r2))
			year++;

		printf("Property %d: This property will begin eroding in year %d.
",i,year);
	}
	printf("END OF OUTPUT.
");
	return 0;
}

  

原文地址:https://www.cnblogs.com/xlturing/p/3300524.html