PAT B -1044 numéros Mars (20 points)

Cliquez sur le lien résumé complet de solution PAT B -AC

Titre:
Mars est 13 comptage hexadécimal:

  • 0 personnes sur terre sont Martiens appelé tret.
  • Digital Earth Mars 1-12 étaient: janvier, février, mars, avril, mai, juin, jly, août, sep,
    PTOM, nov, décomposition.
  • Mars procéderait plus tard 12 chiffres élevés ont été appelés: TAM, HEL, MAA, Huh, TOU, KES, Hei, Elo, Syy,
    lok, Mer, Jou.

Par exemple, traduit de la Terre numérique dans 29 Mars est mar hel et martien elo novembre 115 correspondent Terre numérique. Afin de faciliter l'échange, s'il vous plaît écrire des programmes pour traduire entre les numéros Terre et Mars.

Format d'entrée:
étant donné une entrée positive de la première ligne entier N (<100), suivis par N lignes, chaque ligne donne un [0, 169) dans la section numérique - Terre ou texte, le texte ou la planète Mars.

Format de sortie:
correspondant à chaque ligne de l'entrée de l' autre en sortie de traduction de langue numérique dans une rangée.

entrée de l'échantillon:

4
29
5
elo nov
tam

Exemple de sortie:

hel mar
may
115
13

Mon code:

#include<iostream>
#include<cstdio>
#include<vector>
#include<string>
#include<set>
#include<map>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstring>
#include<sstream>
using namespace std;
//有的时候题目是一起做的,所以会有不需要的头文件

string low[13]={"tret", "jan", "feb", "mar", "apr", "may","jun",
                        "jly", "aug", "sep", "oct", "nov", "dec"};
string high[13]={"000", "tam", "hel", "maa", "huh", "tou", "kes",
                        "hei", "elo", "syy", "lok", "mer", "jou"};

void my1_to_a(string str)
{
    int num=0;
    for(int i=0;i<str.length();i++)
    {
        num=num*10+str[i]-'0';
    }
    int left=num/13;
    int right=num%13;
    //考虑只有高位没有低位的情况,所以拆开输出
    if(left>0)cout<<high[left];
    if(left>0&&right>0)cout<<" ";
    if(right>0||num==0)cout<<low[right];
    cout<<endl;
}


void mya_to_1(string str)
{
    int shi=0,ge=0;
    string left="0",right="0";
    if(str.length()>3)
    {
        right=str.substr(4,3);//low
    }
        left=str.substr(0,3);//high和low都有可能
    for(int i=0;i<13;i++)
    {
        if(left==low[i])ge=i;
        if(right==low[i])ge=i;
        if(left==high[i])shi=i;//不加的话无法识别火星文中13的倍数
    }
    printf("%d\n",shi*13+ge);

}

int main()
{
    int N;
    scanf("%d\n",&N);//记住要有换行符
    for(int i=0;i<N;i++)
    {
        string str;
        getline(cin,str);
        if(str[0]>='0'&&str[0]<='9') my1_to_a(str);
        else mya_to_1(str);
    }
    return 0;
}

Notez que plusieurs considèrent de 13 ans, le seul haut pas faible

Remarque Considérons le nombre de cas 0

Publié 82 articles originaux · louange gagné 1 · vues 1692

Je suppose que tu aimes

Origine blog.csdn.net/qq_34451909/article/details/104798826
conseillé
Classement