poj3299 解题报告

这个题还是算POJ中比较水的主要题意就是获得公式中3个变量中的其中2个然后求第三个。

 humidex = temperature + h

 h = (0.5555)× (e - 10.0)

  e = 6.11 × exp [5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))]

WA了一次,不知道为什么POJ上g++,double输出的时候要用%f不能用%lf。。。

主要思想是将三个变量的权值区分开,分别为1,2,3.然后遍历输入的2个变量,将权值加起来,如果权值为3的话,输入的为前2个变量……以此类推。然后用一个map<char, double>存对应的变量名和值。

代码部分:

#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <map>
using namespace std;
/********************************************//**
 *  humidex = temperature + h
    h = (0.5555)× (e - 10.0)
    e = 6.11 × exp [5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))]
 *
 ***********************************************/
 
int main()
{
  //  freopen("1.txt", "r", stdin);
    double dewpoint;
    double temperature;
    char ch[2];
    while(cin >> ch[0] && ch[0] != 'E')
    {
        map<char, double> table;
        cin >> temperature >> ch[1] >> dewpoint;
        table[ch[0]] = temperature;
        table[ch[1]] = dewpoint;
        int flag = 0;
        for(int i = 0; i < 2; ++i)
        {
            if(ch[i] == 'T')
                flag += 1;
            else if(ch[i] == 'D')
                flag += 2;
            else
                flag += 3;
        }
        switch(flag)
        {
        case 3: //TD
            {
                double e = 6.11 * exp (5417.7530 *((1./273.16) - (1./(table['D'] + 273.16))));
                double h = 0.5555 * (e - 10.0);
                table['H'] = table['T'] + h;
            }
            break;
        case 4://TH
            {
                double e = (table['H'] - table['T']) / 0.5555 + 10.0;
                table['D'] = 1. / ((1./ 273.16) - log(e / 6.11) / 5417.7530) - 273.16;
            }
            break;
        case 5://HD
            {
                 double e = 6.11 * exp (5417.7530 *((1./273.16) - (1./(table['D'] + 273.16))));
                 double h = 0.5555 * (e - 10.0);
                 table['T'] = table['H'] - h;
            }
            break;
        }
 
        printf("T %.1f D %.1f H %.1f\n", table['T'],  table['D'], table['H']);
    }
    return 0;
}



POJ1753题目为"Flip Game",题目给出了一个4x4的棋盘,每个格子有黑色或白色,每次翻转一个格子会同时翻转它上下左右四个格子的颜色,目标是把整个棋盘都变为同一种颜色,求把棋盘变成同种颜色的最小步数。 解题思路: 一般关于棋盘变色的题目,可以考虑使用搜索来解决。对于POJ1753题目,可以使用广度优先搜索(BFS)来解决。 首先,对于每个格子,定义一个状态,0表示当前格子是白色,1表示当前格子是黑色。 然后,我们可以把棋盘抽象成一个长度为16的二进制数,将所有格子的状态按照从左往右,从上往下的顺序排列,就可以用一个16位的二进制数表示整个棋盘的状态。例如,一个棋盘状态为: 0101 1010 0101 1010 则按照从左往右,从上往下的顺序把所有格子的状态连接起来,即可得到该棋盘的状态为"0101101001011010"。 接着,我们可以使用队列来实现广度优先搜索。首先将初始状态加入队列中,然后对于队列中的每一个状态,我们都尝试将棋盘上的每个格子翻转一次,生成一个新状态,将新状态加入队列中。对于每一个新状态,我们也需要记录它是从哪个状态翻转得到的,以便在得到最终状态时能够输出路径。 在搜索过程中,我们需要维护每个状态离初始状态的步数,即将该状态转换为最终状态需要的最小步数。如果我们找到了最终状态,就可以输出答案,即最小步数。 代码实现:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值