题目链接:点击查看

题目大意:现在规定火星文为十三进制的数字,十位和个位的数都给出(都表示为字符串的形式),现在给出n个询问,每次给出火星文或数字,请输出转换后的结果

题目分析:先强调一个小细节需要注意一下,火星文的整10位不输出后面的那个0!!若是在16进制中,十进制的16代表为0x10,

若在二进制中,十进制的2代表为10,但在这个题目中,火星文的13代表为tam,而不是tam tret

回到正题,这个题目还需要注意一下就是在复制粘贴的时候一定要细心,因为图快,第一次处理火星文的那些字符串的时候有一个字符串被另一个替代掉了。。导致交了一发全都WA了(可能就只有我会犯这么蠢的错误了吧),后来改过这个细节之后又交了一发,虽然不是AC,但起码还是过掉了三个样例的

这个题目我是突发奇想的,想了一个非常巧妙的方法来解决这个题目,相对于其他的方法来说可以省去大量的脑细胞以及让代码看起来很好看。。因为代码量少了嘛

我们在读完题后,若仔细思考一下可以得出,由普通数字转换为火星文相对还是比较简单的,但由火星文转换成普通数字就有点麻烦了,因为火星文的13后面不能带着0,需要很多if和else的配合判断才能达到目的,我于是就想,可以写一个change函数,用来将一个数字转换为火星文,因为题目中的询问最大也小于169,也就是13进制的2位,所以我们可以预处理打个表,用于直接给出火星文然后查询普通数字,若给出的是普通数字,也可以用change函数直接输出答案

直接上代码吧,简单易懂:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=100;unordered_map<string,int>vis;const string str[13]={"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"};//个位const string str2[13]={"","tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};//十位string change(int x)//将数字转换为火星文并返回
{int A=x/13;int B=x%13;if(A&&B)//若十位和个位上都有数字return str2[A]+" "+str[B];else if(A&&!B)//若个位为0,则只输出十位return str2[A];else//若十位为0,则只输出个位return str[B];
}void init()
{for(int i=0;i<169;i++)//预处理打表vis[change(i)]=i;
}int main()
{
//  freopen("input.txt","r",stdin);init();int w;cin>>w;getchar();while(w--){string s;getline(cin,s);if(isdigit(s[0]))//若询问的是数字,直接用change函数返回答案{stringstream ss(s);int num;ss>>num;cout<<change(num)<<endl;} else{cout<<vis[s]<<endl;//如果访问的是火星文,直接用打好的表输出答案}}return 0;
}

PAT (Basic Level) 1044 火星数字(模拟)相关推荐

  1. 【PAT乙】1044 火星数字 (20分)

    1044 火星数字 (20分) 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, ju ...

  2. 【全网最细PAT题解】【PAT乙】1044 火星数字(测试点2,测试点4详细解释)

    题目链接 1044 火星数字 题目描述 火星人是以 13 进制计数的:地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, ...

  3. PAT (Basic Level) 1050 螺旋矩阵(模拟)

    题目链接:点击查看 题目大意:给出N个数,降序排序后构造螺旋矩阵,要求行n和列m满足要求n*m==N并且n>m并且(m-n)尽可能小 题目分析:排序后就是简单的蛇形填数了,网上都是用一个whil ...

  4. PAT (Basic Level) 1034 有理数四则运算(模拟)

    题目链接:点击查看 题目大意:模拟有理数的四则运算 题目分析:这个题真的考验代码实现能力,我模拟了好一会,终于是把样例过掉了,然后交了一发WA了两个测试点,一下子想起来如果直接乘的话会爆int,全部改 ...

  5. PAT (Basic Level) - 1025 反转链表(模拟)

    题目链接:点击查看 题目大意:初始时给出一条长度为n的链表,要求从头开始每k位翻转一次,最后剩下的若不足k位,则保持原顺序,如: 1->2->3->4->5->6,若k为 ...

  6. 【PAT乙级】1044 火星数字 (20 分)

    题目地址 #include<bits/stdc++.h> using namespace std; string a[13]={"tret","jan&quo ...

  7. PAT 1044. 火星数字

    PAT 1044. 火星数字 火星人是以13进制计数的: 地球人的0被火星人称为tret. 地球人数字1到12的火星文分别为:jan, feb, mar, apr, may, jun, jly, au ...

  8. 1048 数字加密【PAT (Basic Level) Practice (中文)】

    1048 数字加密[PAT (Basic Level) Practice (中文)] 原题链接:1048 数字加密 (pintia.cn) 1.前言 PAT(乙级)2015年冬季考试 第三题 分数: ...

  9. PAT 乙级 1044  火星数字

    1044 火星数字 (20 point(s)) 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, ...

最新文章

  1. mysql册_Mysql手册
  2. html点击散点图的点显示一个文本,javascript – D3.js中的简单散点图示例?
  3. 分库分表中间件Sharding-JDBC
  4. Python零基础学习笔记(二十)—— tuple元组
  5. nodejs之不换行的输出
  6. maven下载安装环境配置
  7. 如何让debuge的dll名字改变_杨石头:如何给品牌取个好名字?
  8. 如何维护应用程序状态
  9. mysql(指RDS)验证pureftpd登录
  10. 联想哪款服务器性能,联想深腾7000高性能服务器
  11. Java DataStore 封装代码
  12. 计算机高中期末总结作文,高中学期总结作文
  13. mysql timeout的详细介绍
  14. 【乐理学习】音程 升降调 力度标记
  15. 关于actor模型的优缺点分析(1)
  16. HTML——前端实时可视化开发工具
  17. SEED-RL安装教程
  18. C++ 语言重载运算符
  19. 01 TVM环境编译
  20. Java实例——Java方法

热门文章

  1. Apollo浏览全貌
  2. 搭建K8s集群(平台规划和部署方式介绍)
  3. 排序、翻页、函数计算问题
  4. MyBatis 缓存详解-一级缓存的不足
  5. 数据库事务原理详解-事务基本概念
  6. Quartz集成到 Spring
  7. 引入外部化的配置文件
  8. 后台服务系统之搭建ZooKeeper注册中心
  9. 循环嵌套-[扩展]print函数的结尾处理
  10. 外观模式源码解析(springjdbc+myabtis+tomcat)