POJ 1005 I Think I Need a Houseboat
这道题也是一道水题,其实就考验了简单的数学知识。
原题地址:http://poj.org/problem?id=1005
POJ 1005 一艘可以住的船
问题描述
Fred Mapper 正在考虑在路易斯安那州购买一些土地来建他自己的房子。在研究土地的过程中,他发现,路易斯安那州的土地每年都会被密西西比河侵蚀掉 50 平方里。因为 Fred 希望在这个房子里度过余生,所以他需要知道他的那些土地是否会被侵蚀掉。
在做了更多的调查之后,Fred 发现这些土地是以半圆的形状被侵蚀的。这个半圆所对应的正圆的圆心在坐标原点 (0, 0), 坐标轴 x 轴将这个圆切成两半。在 x 轴下方的区域是河流。在第一年刚开始的时候,这个半圆的面积是 0.(半圆如图所示。)
输入
输入数据的第一行是一个正整数 N, 它说明了接下来会有多少组数据。接下来的 N 行中的每一行,都会包含 Fred 正在考虑的那块土地的笛卡尔坐标 (Cartesian coordinate) X 和 Y. 这两个数都是以里 (mile) 为单位的浮点型数据。坐标 Y 将会是一个非负数。原点 (0, 0) 将不会出现在输入中。
输出
对于每组输入,对应一行的输出。这一行应该采用这样的形式:“Property N: This property will begin eroding in year Z.”此处的 N 是数据的组数(从 1 开始),而 Z 表示,这块土地从第 Z 年的年末开始,就一直处于这个被侵蚀的半圆中。在最后一组输出之后,程序还要输出“END OF OUTPUT.”字样。
样例输入
2 1.0 1.0 25.0 0.0
样例输出
Property 1: This property will begin eroding in year 1. Property 2: This property will begin eroding in year 20. END OF OUTPUT.
注释
- 给出的点不会刚好在半圆的边界处:它要么在半圆里,要么在半圆外。
- 这个题目会被自动评测,你的答案必须完全正确,包括大小写 (capitalization), 标点符号 (punctuation), 和空格 (white-space). 包括行末的句号。
- 所有地点的坐标单位都是以英里计的。
解题思路
首先,设 t 是年份,那么第 t 年,半圆的面积是 [latex] A = \frac{1}{2}\pi r^2 = 50t [/latex]. 然后侵蚀半径显然是 [latex] r = \sqrt{x^2+y^2} [/latex]. 最后解出 [latex] t = \frac{1}{100} \pi (x^2+y^2) [/latex]. 注意此处的 t 应该是向上取整的。
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import java.util.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int count = cin.nextInt(); double x = 0.0, y = 0.0; for (int i = 1; i <= count; ++i) { x = cin.nextDouble(); y = cin.nextDouble(); int year = (int)(Math.ceil((Math.PI * (x * x + y * y)) / 100.) + .5); System.out.print("Property " + i + ": "); System.out.print("This property will begin eroding in year "); System.out.println(year + "."); } System.out.println("END OF OUTPUT."); } } |

[...] POJ 1005: http://euyuil.com/2320/ [...]