pata1100

题目
pata1100
题目分析
对数字到火星文和火星文到数字的对应关系的十字位和个位各设立一个map容器,之后对输入的分类,在转换输出即可。注意输入时要用getline,因为可能有空格。
参考代码

#include<iostream>
#include<map>
#include<string>

using namespace std;
void pt1(string s1,	map<int,string> ma1,map<int,string> ma2);
void pt2(string s1,	map<string,int> ma1,map<string,int> ma2);

int main()
{
	int m=0;
	string schu;
	string s1[13]={"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
	string s2[12]={"tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
	map<string,int> m1;
	map<string,int> m2;
	map<int,string> m3;
	map<int,string> m4;
	
	for(int i=0;i<13;i++)
	{
		m1[s1[i]]=i;
		m3[i]=s1[i];
	}
	for(int i=0;i<12;i++)
	{
		m2[s2[i]]=i+1;
		m4[i+1]=s2[i];
	}
	scanf("%d\n",&m);
	for(int i=0;i<m;i++)
	{
		getline(cin,schu);
		if(schu[0]>='0'&&schu[0]<='9')
			pt1(schu,m3,m4);
		else
			pt2(schu,m1,m2);
		if(i<m-1)
			printf("\n");	
	} 
	 
	
	
	
	return 0;
	
} 

void pt1(string s1,	map<int,string> ma1,map<int,string> ma2)//数字转化为其他 
{
	int t=s1.length();
	int a=0,p=1;
	while(t>0)
	{
		a+=(s1[t-1]-'0')*p;
		p*=10;
		t--;
	} 
	if(a>12)
	{
		cout<<ma2[a/13];	
		if(a%13!=0)	
			printf(" ");		
	}
	if(a==0||a%13!=0)
		cout<<ma1[a%13];
}

void pt2(string s1,	map<string,int> ma1,map<string,int> ma2)
{
	int t=s1.length();
	string s;
	int a=0;
	
	if(t>3)
	{
		s.insert(s.begin(),s1.begin(),s1.begin()+3);
		a+=ma2[s]*13;
		s.clear();
		s1.erase(s1.begin(),s1.begin()+4);
	}
	s.insert(s.begin(),s1.begin(),s1.begin()+3);
	a+=ma1[s];
	if(ma1[s]==0&&s!="tret")
		a+=ma2[s]*13;
	printf("%d",a);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值