题目描述:
一块地(可以等效成一个点),坐标为( x, y ),在原点( 0, 0 )处有一以原点为圆心的半圆形水域,该水域每年会延半圆的弧形方向向外均匀扩散50平方公里,问这块地会在几年内被水域吞没。
算法描述:
设这块地会在n年内被吞没,吞没时半圆形水域的半径为r
根据面积公式:50 * n = 1/2 ( π * r ^ 2 )
根据坐标:r ^ 2 = x ^ 2 + y ^ 2
一块地(可以等效成一个点),坐标为( x, y ),在原点( 0, 0 )处有一以原点为圆心的半圆形水域,该水域每年会延半圆的弧形方向向外均匀扩散50平方公里,问这块地会在几年内被水域吞没。
算法描述:
设这块地会在n年内被吞没,吞没时半圆形水域的半径为r
根据面积公式:50 * n = 1/2 ( π * r ^ 2 )
根据坐标:r ^ 2 = x ^ 2 + y ^ 2
解出 n = π * ( x ^ 2 + y ^ 2 ) / 100 ( 如果能整除,n = n; 如果不能整除,n = (int) n + 1 )
Code:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const double pi = acos( -1.0 ); //acos函数括号里应为浮点数,整型的编译器可以通过但OJ会CE
const double eps = 0.99999999; //用作结果不是整数的情况处理
int main()
{
int n;
double x, y;
scanf( "%d", &n );
for( int i = 1; i <= n; i++ )
{
scanf( "%lf%lf", &x, &y );
int years = (int)( pi * ( x * x + y * y ) / 100.0 + eps );
printf( "Property %d: This property will begin eroding in year %d.\n", i, years );
}
printf( "END OF OUTPUT.\n" );
return 0;
}