zoukankan      html  css  js  c++  java
  • PAT乙级1044

    题目链接

    https://pintia.cn/problem-sets/994805260223102976/problems/994805279328157696

    题解

    需要注意的几个点:

    • 题目有指出给出的数字范围是[0,169),即0至13*13,所以可知火星文不超两个单词:高位 低位

      这点我没注意(只是看了,没有细想)

    • 火星数字低位数字是tret时(即是13的整数倍时),不用输出这个tret。

      这一点样例中有暗示,我没完全体会出来,只是看到数字为13时不用输出tret

    // PAT BasicLevel 1044
    // https://pintia.cn/problem-sets/994805260223102976/problems/994805279328157696
    
    #include <iostream>
    #include <sstream>
    #include <string>
    #include <vector>
    #define RADIX 13
    using namespace std;
    
    // 地球数字与火星数字的映射
    string mars0[] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
    string mars1[] = {"", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
    
    void earthToMars(string line); // 地球数字转火星数字,line是一行输入
    void marsToEarth(string line); // 火星数字转地球数字,line是一行输入
    
    int main()
    {
    
        int n;             // n行输入
        scanf("%d
    ", &n); // scanf默认不读取换行符,加上
    会读取换行符,或者使用getchar()读取换行符
        string line;       // 保存一行
    
        // 获取n行输入并进行相应处理
        while (n--)
        {
            // 读取一行
            getline(cin, line);
    
            // 分别处理并输出结果
            if (isdigit(line[0]))
            {
                earthToMars(line);
            }
            else
            {
                marsToEarth(line);
            }
        }
    
        system("pause");
        return 0;
    }
    
    void earthToMars(string line)
    {
        int num = stoi(line);
        if (num >= RADIX)
        {
            if (num % RADIX == 0)
            {
                cout << mars1[num / RADIX] << endl;
            }
            else
            {
                cout << mars1[num / RADIX] << ' ' << mars0[num % RADIX] << endl;
            }
        }
        else
        {
            cout << mars0[num] << endl;
        }
    }
    
    void marsToEarth(string line)
    {
        stringstream ss(line); // 用户输入的一行
        string str;            // 用户输入的一个字符串
        vector<string> strVec; // 保存各位火星数字
        int num;               // 最终求得的地球数字
    
        // 读取字符串
        while (ss >> str)
        {
            strVec.push_back(str);
        }
    
        // 一行有两个字符串,可表示[157,158]
        if (strVec.size() == 2)
        {
            str = strVec.front();
            // 高位数字
            for (int i = 0; i < RADIX; ++i)
            {
                if (str == mars1[i])
                {
                    num = RADIX * i;
                    break;
                }
            }
    
            // 低位数字
            str = strVec.back();
            for (int i = 0; i < RADIX; ++i)
            {
                if (str == mars0[i])
                {
                    num += i;
                    break;
                }
            }
        }
        // 一行有一个字符串,可表示[0,156]
        else if (strVec.size() == 1)
        {
            str = strVec.front();
            for (int i = 0; i < RADIX; ++i)
            {
                // 小于RADIX,即[0,12]
                if (str == mars0[i])
                {
                    num = i;
                    break;
                }
                // 大于等于RADIX,即[13,156]
                if (str == mars1[i])
                {
                    num = i * RADIX;
                    break;
                }
            }
        }
    
        printf("%d
    ", num);
    }
    
    

    参考链接

    https://blog.csdn.net/qq_22194315/article/details/54428678

    https://blog.csdn.net/weixin_39345384/article/details/82317205


    作者:@臭咸鱼

    转载请注明出处:https://www.cnblogs.com/chouxianyu/

    欢迎讨论和交流!


  • 相关阅读:
    Android Lock Screen Orientation
    android studio修改新项目package名称
    DevExpress控件GridView挂下拉控件无法对上值
    Datawindow.net+access数据窗口制作方法
    LR11中web_save_timestamp_param
    LR自带网站飞机订票系统 启动
    MySQL ODBC驱动安装和配置数据源
    【笔记】LR配置ODBC连接数据库进行参数化(mysql )未完待续
    【笔记】LR录制方式和常用函数
    【笔记】http1.1支持的7种请求方法
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/11689574.html
Copyright © 2011-2022 走看看