C++ map简单应用、进制转换打表法---PAT B1044火星数字

题目链接:https://www.patest.cn/contests/pat-b-practise/1044

该题目涉及到转换,可采用“打表法”,将所有结果都存入表格,需要转换时自取就可。

由于“火星文”是英文字母,打表时候考虑使用map,将会变得简单可行。

map可以看成下标是指定类型的数组,一般通过一个下标(整型)找到一个string型,利用string数组可以很方便;如果利用string型找到int型,则用map将会非常方便。

例如,定义map strToNum;   string s=“jan”;

赋值时可以 strToNum[s]=5; 查找时也利用strToNum[s]即可。这里的用法类似于一个数组。

对于此题,还需注意 scanf("%d%*c",&n);  这样getline就会跳过n;

tline(cin,s);即可以读取后面的行。

代码如下:

#include 
#include 
#include 
using namespace std;string unitDig[13]={"tret","jan","feb","mar", "apr", "may","jun", "jly", "aug", "sep", "oct", "nov", "dec"};
string tenDig[13]={"tret","tam","hel", "maa", "huh", "tou", "kes", "hei","elo", "syy", "lok", "mer", "jou"};
map strToNum;
string numToStr[170];
void init(){for(int i=0;i<13;i++){strToNum[unitDig[i]]=i;strToNum[tenDig[i]]=i*13;numToStr[i]=unitDig[i];numToStr[i*13]=tenDig[i];}for(int i=1;i<13;i++){for(int j=1;j<13;j++){string str = tenDig[i]+" "+unitDig[j];strToNum[str]=i*13+j;numToStr[i*13+j]=str;}}
}int main()
{init();int n;scanf("%d%*c",&n);for(int i=0;i='0'&&s[0]<='9'){int num=0;for(int i=0;i



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部