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", &n); // scanf默认不读取换行符,加上\n会读取换行符,或者使用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\n", num);
}
参考链接
https://blog.csdn.net/qq_22194315/article/details/54428678
https://blog.csdn.net/weixin_39345384/article/details/82317205
作者:@臭咸鱼
转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!
PAT乙级1044的更多相关文章
- PAT 乙级 1044
题目 题目地址:PAT 乙级 1044 思路 简单的进制转化问题,根据题意进行相应的进制转化即可,因为题目已经划定了数据的求解范围,甚至连进制转化中的循环都不需要,进行简单计算就可以得出结果: 但本题 ...
- PAT 乙级 1044 火星数字 (20 分)
1044 火星数字 (20 分) 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, j ...
- C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...
- PAT乙级真题及训练题 1025. 反转链表 (25)
PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...
- PAT 乙级 1024
题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...
- PAT 乙级 1017
题目 题目地址:PAT 乙级 1017 题解 粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的: 具体分析一下本题: 因为题设中的除数(n)是一位整数,因此大幅简化 ...
- PAT 乙级 1015
题目 题目地址:PAT 乙级 1015 题解 常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码: 在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序, ...
- PAT 乙级 1003
题目 题目地址:PAT 乙级 1003 题解 规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意:总之这道题要考虑的东西更多,细节上也要特别注意: 规律:“如果 aPbTc 是 ...
- PAT 乙级 1059
题目 题目地址:PAT 乙级 1059 题解 开始我是从暴力循环的角度考虑这道题,大概计算了一下时间复杂度应该不会超,但是很不幸没有通过,时间超限:之后考虑搜索算法可能优化不太好,因此就把输入的序列先 ...
随机推荐
- C/C++查漏补缺(常更)
一.#define宏定义 如下程序段,则输出结果为: #define MAX 12 int main(){ cout << "20\0MAX019" << ...
- Linear regression with one variable - Cost function
摘要: 本文是吴恩达 (Andrew Ng)老师<机器学习>课程,第二章<单变量线性回归>中第7课时<代价函数>的视频原文字幕.为本人在视频学习过程中逐字逐句记录下 ...
- OpenGL学习笔记 之三 (简单示例 太阳月亮地球)
#include<glut.h> // 太阳.地球和月亮 // 假设每个月都是30天 // 一年12个月,共是360天 ;//day的变化:从0到359 void myDisplay(vo ...
- 【ARM-Linux开发】使用QT和Gstreanmer 遇到的一些问题
1.如果出现错误,可能是在安装UCT PCRF时,相关组件不全,略举两个碰到的错误. 1)curl/curl.h:No such file or directory --可能原因是libcurl及相关 ...
- tomcat修改server.xml的虚拟目录,启动eclipse后清空
修改eclipse中servers的server.xml 参考文章:https://blog.csdn.net/binglong_world/article/details/77604324
- BeginLinux Programming chapter16: X11桌面系统简介
当前两个最流行的linux desktop environment: GNOME 和KDE, 两者对应的图形库分别是 GTK+ 和 QT. GNOME与KDE与X11的关系: X defines no ...
- 基于laravel框架构建最小内容管理系统
校园失物招领平台开发 --基于laravel框架构建最小内容管理系统 摘要 针对目前大学校园人口密度大.人群活动频繁.师生学习生活等物品容易遗失的基本现状,在分析传统失物招领过程中的工作效率低下. ...
- MySQL 军规
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...
- 整理一下rmq
rmq(int i,int j,int a)表示查询a数组i到j区间的内容中的最大/最小值核心部分为二分区间以及st预处理算法 先说st预处理算法吧 int dp[i][j];//表示以i开始 长度为 ...
- (四)lucene之文本域加权
一.前言 1.1 应用场景 有时在搜索的时候,会根据需要的不同,对不同的关键值或者不同的关键索引分配不同的权值,让权值高的内容更容易被用户搜索出来,而且排在前面. 为索引域添加权是再创建索引之前,把索 ...