本文最后更新于:2020年4月13日 早上

题目描述

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

好,描述完了题意,我们来分析。

题目分析

作为初步准备,我声明了一个字符串类型str,其方向字符按顺序排列,并且声明了一个float类型的dis_table,其中每个风速的上限都为上限。稍后我将解释如何使用它。

由于将deg作为原始值乘以10的值输入,因此除以10即可返回原始值。
由于dis是一分钟,因此除以60可将其转换为秒。
然后使用舍入将小数点后第二位舍入。

使用11.25初始化并声明双精度型电流。
同时声明一个int类型索引。

在这里,我们对问题陈述中的异常做出回应。
当dis为0时,deg输出’C’,因此输出方向’C’和风速0并结束程序。

当dis不为0时,在for语句中打开deg。
如果找到deg的范围,则将下标替换为index并退出循环。当不在度数范围内时,使用方向间隔为22.5度的事实将22.5添加到电流。之后,再次查询范围。

分析完了题目的意思,放代码:

$Code$

#include <bits/stdc++.h>
using namespace std;
int main()
{
    float deg, dis;
    string str[17] =
    {"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", 
    "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N"};
    float dis_table[14] =
    {0.2, 1.5, 3.3, 5.4, 7.9, 10.7, 13.8, 
    17.1, 20.7, 24.4, 28.4, 32.6, 200.0};
    int dis_ans;
    cin >> deg >> dis;
    
    deg /= 10;
    dis /= 60;
    dis = round(dis * 10) / 10;
    for (int i = 0; i < 13; i++){
        if (dis <= dis_table[i]){
            dis_ans = i;
            break;
        }
    }
    
    double current = 11.25;
    int index;
    if (dis_ans == 0){
        cout << "C" << " " << 0 << endl;
        return 0;
    }
    else {
        for (int i = 0; i < 17; i++){
            if (deg < current){
                index = i;
                break;
            }
        current += 22.5;
        }
    }
    cout << str[index] << " " << dis_ans << endl;
}

欢迎各位大佬$D$我


本文在 CC BY-NC-ND 4.0( https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh )协议 的前提下,禁止超过文章30%字数的摘录(对于不超过文章30%字数的摘录,要求在醒目位置注明原文作者与原文链接),同时,在未经作者本人手写签名许可的情况下,禁止任何形式的全文转载,禁止发布任何基于本文的再创作。

题解 AT2026 【天下一魔力発電】 上一篇
hexo博客【让国内外各大搜索引擎收录】 下一篇
本博客采用 xCss 的 Valine 评论系统,搭配了 Valine-Admin,垃圾评论将会被过滤。所以在评论的时候,请注意您的语言。如果您的评论被过滤但并非垃圾评论,请发邮件到 luosiweimail@gmail.com 进行申诉。