1044 火星数字 (20分)

火星人是以 13 进制计数的:
  • 地球人的 0 被火星人称为 tret。
  • 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。
  • 火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。

例如地球人的数字 29 翻译成火星文就是 hel mar;而火星文 elo nov 对应地球数字 115。为了方便交流,请你编写程序实现地球和火星数字之间的互译。

输入格式:

输入第一行给出一个正整数 N(<),随后 N 行,每行给出一个 [0, 169) 区间内的数字 —— 或者是地球文,或者是火星文。

输出格式:

对应输入的每一行,在一行中输出翻译后的另一种语言的数字。

输入样例:

4
29
5
elo nov
tam
 

输出样例:

hel mar
may
115
13

又写了大半夜,终于通过了所有测试,需要注意的是这道题用C语言写回避C++容易一些,建议大家两种语言都学都用,没有绝对优势的语言,针对不同情况选用合适的即可。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <ctype.h>
 5 
 6 int main(){
 7     char s[15][9]={"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", 
 8     "sep", "oct", "nov", "dec"};
 9     char s2[15][9]={"cuowu","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo",
10      "syy", "lok", "mer", "jou"};    
11     int n,i;
12     scanf("%d",&n);
13     getchar();
14     for(i=0;i<n;i++){    
15         int num=0;             
16         int k=0;    
17         char s3[4]={};    
18         char s4[4]={};    
19         char c=0;    
20         while((c=getchar())!=' ' && c!='\n'){
21             s3[k]=c;k++;
22         }
23         if(c==' '){
24             scanf("%s",s4);    
25             getchar();
26             num++;            
27         }        
28          if(isdigit(s3[0])){
29              int a=atoi(s3);
30              if(a>12){
31                  if(a%13==0)
32                      printf("%s\n",s2[a/13]);
33                  else 
34                      printf("%s %s\n",s2[a/13],s[a%13]);
35             }else{
36                 printf("%s\n",s[a%13]);
37             }
38         }else{    //字符串转数字                 
39             if(num==1){
40                 int sum=0;
41                 for(int j=0;j<=12;j++){
42                     if(strcmp(s3,s2[j])==0)
43                         sum = 13*j;
44                 }                
45                 for(int j=0;j<=12;j++){
46                     if(strcmp(s4,s[j])==0)
47                         printf("%d\n",sum+j);
48                 }
49             }else{                
50                 for(int j=0;j<=12;j++){
51                     if(strcmp(s3,s[j])==0)
52                         printf("%d\n",j);
53                 }
54                 for(int j=0;j<=12;j++){
55                     if(strcmp(s3,s2[j])==0)
56                         printf("%d\n",j*13);
57                 }
58             }            
59                 
60         }
61         
62     }        
63     return 0;
64 }

 

posted @ 2020-02-20 00:21  葛杨杨  阅读(259)  评论(0编辑  收藏  举报