C++题目:风力观测 風力観測AtCoder[ABC001C]

[ABC001C] 風力観測

洛谷AT_abc001_3点这里查看原题
题目难度:暂无评定(个人认为是入门,只是一道枚举题)

题目描述

ある風向風速計は、風向の角度と風程を $ 1 $ 分毎に自動で記録してくれます。

風向の角度というのは真北を $ 0 $ 度とし、そこから時計回りに風の吹いてくる方向を定めたものです。気象観測等では全体を等しく $ 16 $ 分割した $ 16 $ 方位が用いられます。$ 16 $ 方位と角度は、以下の表のように対応します。

風向と角度の関係 方位 角度 方位 角度 N (北) 他のいずれにも当てはまらない S (南) $ 168.75 $ 度以上 $ 191.25 $ 度未満 NNE (北北東) $ 11.25 $ 度以上 $ 33.75 $ 度未満 SSW (南南西) $ 191.25 $ 度以上 $ 213.75 $ 度未満 NE (北東) $ 33.75 $ 度以上 $ 56.25 $ 度未満 SW (南西) $ 213.75 $ 度以上 $ 236.25 $ 度未満 ENE (東北東) $ 56.25 $ 度以上 $ 78.75 $ 度未満 WSW (西南西) $ 236.25 $ 度以上 $ 258.75 $ 度未満 E (東) $ 78.75 $ 度以上 $ 101.25 $ 度未満 W (西) $ 258.75 $ 度以上 $ 281.25 $ 度未満 ESE (東南東) $ 101.25 $ 度以上 $ 123.75 $ 度未満 WNW (西北西) $ 281.25 $ 度以上 $ 303.75 $ 度未満 SE (南東) $ 123.75 $ 度以上 $ 146.25 $ 度未満 NW (北西) $ 303.75 $ 度以上 $ 326.25 $ 度未満 SSE (南南東) $ 146.25 $ 度以上 $ 168.75 $ 度未満 NNW (北北西) $ 326.25 $ 度以上 $ 348.75 $ 度未満

風程というのは、風向風速計の風車が、ある一定の時間に風によって回った量を距離によって表したものです。
例えば、$ 1 $ 分間の風程が $ 300{\rm\ m} $ というのは、$ 1 $ 分間に吹いた風によって風車が $ 300{\rm\ m} $ 回ったという事です。この時、この $ 1 $ 分間の平均風速は $ 300{\rm\ m} $ を $ 60 $ 秒で割って、$ 5{\rm\ m}/{\rm\ s} $ と求められます。

与えられたデータを、ラジオ等で流れる「気象通報」と同様の形式に直そうと思います。
気象通報では、$ 16 $ 方位での風向と、風力 (ビューフォート風力階級) が伝えられます。

風向は、先の表の $ 16 $ 方位です。 ただし、風力 $ 0 $ の場合、実際には「風弱く」と伝えられるため、風向は $ 16 $ 方位ではなく、特別な向きであるCとします。

風力は、風速を計算し、小数第 $ 2 $ 位を四捨五入して、以下の対応により風力に変換します。
風力と風速の関係 (ビューフォート風力階級) 風力 風速 風力 風速 風力 風速 風力$ 0 $ $ 0.0{\rm\ m}/{\rm\ s} $ 以上 $ 0.2{\rm\ m}/{\rm\ s} $ 以下 風力$ 5 $ $ 8.0{\rm\ m}/{\rm\ s} $ 以上 $ 10.7{\rm\ m}/{\rm\ s} $ 以下 風力$ 10 $ $ 24.5{\rm\ m}/{\rm\ s} $ 以上 $ 28.4{\rm\ m}/{\rm\ s} $ 以下 風力$ 1 $ $ 0.3{\rm\ m}/{\rm\ s} $ 以上 $ 1.5{\rm\ m}/{\rm\ s} $ 以下 風力$ 6 $ $ 10.8{\rm\ m}/{\rm\ s} $ 以上 $ 13.8{\rm\ m}/{\rm\ s} $ 以下 風力$ 11 $ $ 28.5{\rm\ m}/{\rm\ s} $ 以上 $ 32.6{\rm\ m}/{\rm\ s} $ 以下 風力$ 2 $ $ 1.6{\rm\ m}/{\rm\ s} $ 以上 $ 3.3{\rm\ m}/{\rm\ s} $ 以下 風力$ 7 $ $ 13.9{\rm\ m}/{\rm\ s} $ 以上 $ 17.1{\rm\ m}/{\rm\ s} $ 以下 風力$ 12 $ $ 32.7{\rm\ m}/{\rm\ s} $ 以上 風力$ 3 $ $ 3.4{\rm\ m}/{\rm\ s} $ 以上 $ 5.4{\rm\ m}/{\rm\ s} $ 以下 風力$ 8 $ $ 17.2{\rm\ m}/{\rm\ s} $ 以上 $ 20.7{\rm\ m}/{\rm\ s} $ 以下 風力$ 4 $ $ 5.5{\rm\ m}/{\rm\ s} $ 以上 $ 7.9{\rm\ m}/{\rm\ s} $ 以下 風力$ 9 $ $ 20.8{\rm\ m}/{\rm\ s} $ 以上 $ 24.4{\rm\ m}/{\rm\ s} $ 以下
風向 (角度) と $ 1 $ 分間の風程が入力されるとき、それを気象通報の形式に直して出力するプログラムを作成してください。 入力は以下の形式の $ 1 $ 行からなる。 > $ Deg $ $ Dis $

  • $ Deg $は風向を示し、本来の角度を $ 10 $ 倍した整数で与えられる (例えば、$ 90 $ 度なら $ 900 、 、 137.5 $ 度なら$ 1375 $と与えられる) 。

  • $ Dis $は $ 1 $ 分間の風程を示す整数である。単位はメートル $ ({\rm\ m}) $ である。

  • $ 0≦Deg $

  • $ 0≦Dis $

出力は以下の形式の $ 1 $ 行とする。 > $ Dir $ $ W $

  • $ Dir $は風向を示し、C, N, E, W, S からなる $ 1 〜 〜 3 $ 文字の文字列である。
  • $ W は風力を示し、 は風力を示し、 は風力を示し、 0 $ 以上 $ 12 $ 以下の整数である。

また、出力の末尾には改行を入れること。

题面翻译

  • 角度指定了划分为 16 16 16个方向的方向(风向),因此在将其转换为与之对应的 1 − 3 1-3 13个字符的方向(风向)后,将其输出。
  • 由于风速是以 m / m i n m / min m/min为单位给出的,因此请输出从 0 0 0 12 12 12的相应风能。
  • 作为例外,当风力为0时,方向(风向)应为“ C C C

输入格式

输出格式

答案

#include <bits/stdc++.h>
using namespace std;

int deg, t, v;
    
int main() {
    cin >> deg >> t;
    int fast = t / 6;
    if (t % 6 >= 3) fast++;
    string s;
    if (deg <= 112) s = "N";
    else if (deg <= 337) s = "NNE";
    else if (deg <= 562) s = "NE";
    else if (deg <= 787) s = "ENE";
    else if (deg <= 1012) s = "E";
    else if (deg <= 1237) s = "ESE";
    else if (deg <= 1462) s = "SE";
    else if (deg <= 1687) s = "SSE";
    else if (deg <= 1912) s = "S";
    else if (deg <= 2137) s = "SSW";
    else if (deg <= 2362) s = "SW";
    else if (deg <= 2587) s = "WSW";
    else if (deg <= 2812) s = "W";
    else if (deg <= 3037) s = "WNW";
    else if (deg <= 3262) s = "NW";
    else if (deg <= 3487) s = "NNW";     
    else s = "N";
    
    if (fast <= 2) v = 0;
    else if (fast <= 15) v = 1;
    else if (fast <= 33) v = 2;
    else if (fast <= 54) v = 3;
    else if (fast <= 79) v = 4;
    else if (fast <= 107) v = 5;
    else if (fast <= 138) v = 6;
    else if (fast <= 171) v = 7;
    else if (fast <= 207) v = 8;
    else if (fast <= 244) v = 9;
    else if (fast <= 284) v = 10;
    else if (fast <= 326) v = 11;
    else v = 12;
    if (!v) puts("C 0");
    else cout << s << ' ' << v << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值