PAT——A1100 Mars Numbers(map)

题目链接:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
using namespace std;
string st1[20]={"tret","jan", "feb", "mar", "apr", "may", "jun","jly","aug","sep","oct", "nov","dec"};
string st2[20]={"tret","tam", "hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};
string numToStr[170];
map<string,int> strToNum;
void init()
{
    for(int i=0;i<13;i++)
    {
        numToStr[i]=st1[i];
        strToNum[st1[i]]=i;
        numToStr[i*13]=st2[i];
        strToNum[st2[i]]=i*13;
    }
    for(int i=1;i<13;i++)
    {
        for(int j=1;j<13;j++)
        {
           string str=st2[i]+" "+st1[j];
           numToStr[i*13+j]=str;
           strToNum[str]=i*13+j;
        }
    }
}
int main()
{
   init();
   int t;
   scanf("%d",&t);
   getchar();
   while(t--)
   {
       string str;
       getline(cin,str);
       if(isdigit(str[0]))
          {
              int num=0;
              for(int i=0;i<str.length();i++)
                {
                    num=num*10+(str[i]-'0');
                }
                cout<<numToStr[num]<<endl;
          }
          else
            cout<<strToNum[str]<<endl;
   }
   return 0;
}

数据比较小,打表可以做

还有学到另一种吸收空格的%*c

然后如果不用map的话 借鉴大神的博客

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
using namespace std;
string st1[20]={"tret","jan", "feb", "mar", "apr", "may", "jun","jly","aug","sep","oct", "nov","dec"};
string st2[20]={"tret","tam", "hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};
string numToStr[170];
map<string,int> strToNum;
void func1(string s)
{
    int len=s.length(),num=0;
    for(int i=0;i<len;i++)
    {
        num=num*10+(s[i]-'0');
    }
    if(num/13)
    {
        cout<<st2[num/13];
        if(num%13)
            cout<<' '<<st1[num%13];
    }
    else
        cout<<st1[num%13];
}
void func2(string s)
{
    int len=s.length(),num=0;
    if(len==4)
        {
            cout<<0;
            return;
        }
    else if(len==3)
    {
        for(int i=1;i<=12;i++)
        {
            if(s==st1[i])
            {
                cout<<i;
                return;
            }
            if(s==st2[i])
            {
                cout<<i*13;
                return;
            }
        }
    }
    else
        {
            string temp1=s.substr(0,3),temp2=s.substr(4,3);
            for(int i=1;i<=12;i++)
            {
                if(temp1==st2[i])
                    num+=i*13;
                if(temp2==st1[i])
                    num+=i;
            }
            cout<<num;
        }
    return;
}
int main()
{
   int t;
   scanf("%d",&t);
   getchar();
   while(t--)
   {
       string str;
       getline(cin,str);
       if(isdigit(str[0]))
          {
              func1(str);
          }
          else
           func2(str);
           cout<<endl;
   }
   return 0;
}

巧利用字符串的长度

猜你喜欢

转载自blog.csdn.net/qq_42232118/article/details/82025449