p3299 简单题两种解法

        最近在图书馆借了本书,名字叫做《数据结构编程实验--大学生程序设计课程与竞赛训练教材》,这本书唯一的好处就是给POJ的题目分类了下,从简单题开始,到运用各种算法的题目,这样,至少给了我一个循序渐进的过程。

        言归正传,题目poj3299,难点在于算dewpoint的那个过程。书上给出的方法繁琐,效率低下,不过是一个很好的借鉴。其想法就是二分查找方法的一个变形,叫减半递推技术。减半”是指将问题的规模减半,而问题的性质不变; “递推”是指重复“减半”的过程。这里的减半递推也就是设定一个增量值,每次循环增量值减小一半,不断去向正确答案靠近。说得不清楚,想说一下:

        首先,我们知道了temp值和hum值,求dew值,这里假设初始的露点dew值为0,然后进入循环:
        dew值增量从100开始,以后每次循环减半。根据公式,求出hum值hum1
                  1.如果hum1大于给定的hum,则dew值减少一个增量
                  2.如果hum1小于给定的hum,则dew值增加一个增量
        循环直到组后的增量值小于0.00012为止,此时得到dew值的近似值。

主要代码如下:

double calc_dew(){ //temp 温度temperature,hum humidex
    double x = 0;        //初始的dew值
    double delta=100;   //增量值

    for (){
        if (calc_hum(temp,x) > hum) x-= delta; //hum1与hum比较
        else x += delta;
    }
    return x;
}
当然了,更简单的方法就是推导下dew的求值公式,更直接,效率也高。

void calc_dew(){
    double e;
    
    e = 10.0+(hum-temp)/0.5555;
    dew = 1/(1/273.16-(log(e/6.11)/5417.7530))-273.16;
};
哎,可悲我还在做这么简单的题目~

转载于:https://my.oschina.net/gongshang/blog/87952

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值