PATB1044 火星数字(20 分)

Posted hebust

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PATB1044 火星数字(20 分)相关的知识,希望对你有一定的参考价值。

/*
火星文有两位,第二位为0不输出

 
 */
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<ctype.h>

using namespace std;
char arr[20]={0};
char data[13][2][5]={
{"tret","tret"},
{"jan","tam"},
{"feb","hel"},
{"mar","maa"},
{"apr","huh"},
{"may","tou"},
{"jun","kes"},
{"jly","hei"},
{"aug","elo"},
{"sep","syy"},
{"oct","lok"},
{"nov","mer"},
{"dec","jou"}
};
void prr(char *str){
    if(str[3]==‘t‘&&str[0]==‘t‘&&str[1]==‘r‘&&str[2]==‘e‘){
        printf("0");return;
    }
    if(islower(str[0])){//输入为火星文
        int high=0,low=0;
        for(int i=0;i<13;i++){
            if(data[i][1][0]==str[0]&&data[i][1][1]==str[1]&&data[i][1][2]==str[2])//前边的字符只可能是高位
                high+=i*13;
            if(data[i][0][0]==str[0]&&data[i][0][1]==str[1]&&data[i][0][2]==str[2])//后边的字符不确定
                low+=i;
            if(data[i][0][0]==str[4]&&data[i][0][1]==str[5]&&data[i][0][2]==str[6]&&str[3]!=‘‘)
                low+=i;
        }
        printf("%d",low+high);
    }
    else{//输入为数字
        int temp;
        sscanf(str,"%d",&temp);
        if(temp<13){
            printf("%s",&data[temp][0]);
        }
        else{
            printf("%s",&data[temp/13][1]);
            if(temp%13!=0)
            printf(" %s",&data[temp%13][0]);
        }
    }
}
int main(){
    int N;scanf("%d",&N);
    for(int i=0;i<N;i++){
        scanf(" %[^
]",arr);
        if(i!=0) printf("
");
        prr(arr);
    }
    return  0;
}

以上是关于PATB1044 火星数字(20 分)的主要内容,如果未能解决你的问题,请参考以下文章

1044 火星数字 (20 分)

1044 火星数字 (20 分)

PTA乙级 (*1044 火星数字 (20分))

PTA 1044 火星数字 (20 分) C++实现

PAT乙级1044 火星数字 (20 分)

1044. 火星数字(20)