Life is short, so we need program

每日一题, 积累从点滴开始

  :: 首页 :: 博问 :: 闪存 :: :: 联系 :: :: 管理 ::

ZJU-1049-I Think I Need a Houseboat(解题来自《ACM国际大学生程序设计竞赛题解(1)》

【题目大意】

  弗雷德先生正考虑在路易斯安那州买一块地造房子。在土地调查中,他了解到由于密西西比河的侵蚀,路易斯安那州正以每年50平方英里的速度变小。因为弗雷德先生谢昂在他的新房子里生活直至终老,所以他想知道他的那块地是否会被侵蚀掉。

  经过进一步研究,弗雷德发现将要被侵蚀的土地呈半圆形。半圆是一个以(0,0)点位中心的圆的一半,半圆的直边是x轴。x轴以下的部分在水中。第一年开始时,圆的面积是0(半圆如题所以)。

【输入】

  第一行是一个正整数N,表示有几组测试数据。

  接下来N行,每行是(x,y)坐标,弗雷德正考虑的地皮位置,坐标值是以英里为单位的浮点数,坐标y不会为负数,这两个数不会都为0。

输出】

  对每组测试数据,输出一行,其格式为:

  “Property N: This property will begin eroding in year Z."

  其中N是测试数据编号(从1开始),经过Z年后,该处房产将位于半圆内。即经过Z年后,弗雷德的房子会被淹没。Z必须是一个整数。

  在所有测试数据之后,输出”END OF OUTPUT."

【算法分析】

  知道房产的位置坐标(x,y),就可以计算圆的半径r:

                r*r=x*x+y*y

  半圆的面积:

                area=PI*r*r/2

  处于侵蚀范围的年数:

                year=(int)ceil(area/50.0)

  其中函数ceil(double x),是得到大于x的最小整数。

【程序代码】

#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;
const double PI=3.1415927;
int main()
{
    int n,i=1;
    int year;
    double x,y,area,radius;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%lf%lf",&x,&y);
        radius=x*x+y*y;
        area=PI*radius/2;
        year=(int)ceil(area/50.0);
        printf("Property %d: This property will begin eroding in year %d.\n",i++,year);
        
    }
    printf("END OF OUTPUT.\n");
    return 0;
}

 

posted on 2013-05-07 23:44  CDU_ICPC  阅读(404)  评论(0编辑  收藏  举报