当前位置: 代码迷 >> 综合 >> 【ACM之旅】缩小的陆地
  详细解决方案

【ACM之旅】缩小的陆地

热度:52   发布时间:2024-01-20 22:08:57.0

一、[题目] 缩小的陆地

时间限制:1.0s   内存限制:512.0MB

问题描述

Fred正在考虑在路易斯安那州找一块土地在上面建造他的房子。在调查过程中,他了解到路易斯安那州的陆地正以每年50平方英里的速度缩小,原因是密西西比河对陆地的侵蚀。由于Fred希望他的余生都能居住在这所房子里,所以他需要知道他的土地是否会被河水侵蚀。
Fred做了更多的研究后发现,正在损失的陆地呈现出一个半圆形的形状,这个半圆是以(0,0)为圆心的圆的X轴以上的部分,X轴以下的区域是河水,在第一年开始时这个半圆的面积是0。(如下图所示)

输入格式

第一行是一个正整数表示接下来有多少组数据,以下的每一行代表一组数据,每组数据由两个浮点数组成,以空格隔开,分别代表Fred房子在平面内的坐标X和Y,单位是英里,其中Y>=0。

输出格式

对于每一组输入数据,输出一个整数Z,代表Fred的房子会在第Z年中被河水侵蚀。如果在第Z年结束时Fred的房子正好在半圆的边界上,那么应该算作是在第Z+1年被侵蚀,返回Z+1。每个返回结果占一行。

样例输入

2
1.0 1.0
25.0 0.0

样例输出

1
20


二、[代码]:

PS. 缩小的陆地 是一道数学计算题目,解题的关键在于充分把握圆面积的计算公式(S=πr?),从题目中可以知道“陆地正在以每年50平方英里的速度被侵蚀”这个重要突破口,也就是说“这个半圆正在以每年50平方英里的速度扩大”,理解了这一点,我想解出这题应该不难了,以下列出我的解法。

算法一: 基础数学公式法(S = πr?  与 c? = x?+y? )

#include <stdio.h>
int main()
{
int i;
scanf("%d",&i);
while(i--){
float x,y,s=0;
scanf("%f %f",&x,&y);
do{
s+=100;  //半圆每年增加50平方英里也就是这个圆每年增加100平方英里
}while(s/3.1415926<x*x+y*y); //由公式S=πr2推导出r2= S/π(每年扩张后的圆的半径),c2=x2+y2(该坐标与原点的距离),当r<c时该点未被侵蚀到
printf("%.0f\n",s/100);
}
return 0;
}


欢迎评论和转载,转载请注明文章出处,我对此表示最真诚的敬意!

  相关解决方案