zoukankan      html  css  js  c++  java
  • 1044 火星数字 (20 分)

    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(<100),随后 N 行,每行给出一个 [0, 169) 区间内的数字 —— 或者是地球文,或者是火星文。

    输出格式:

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

    输入样例:

    4
    29
    5
    elo nov
    tam
    

    输出样例:

    hel mar
    may
    115
    13

    大佬的题目思路:

    1.13的倍数可以直接用1个高位“火星文”表示,不需要在低位补“tret”即"0"。

    2.当输入的“火星文”只有一个单词的时候,需要判断是高位还是低位。

    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int n;
        int l=0;
        string k;
        int num;
        int nums[3];
        string s1="",s2="";
        string strs[105]={"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
        string strs_1[105]={"tret","tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};
        scanf("%d",&n);
        getchar();
        while(n--){
            s1 = "";nums[0] = 0;
            s2 = "";nums[1] = 0;
            l = 0;
            getline(cin,k);
            if(k[0]>='0'&&k[0]<='9'){
                num = stoi(k);
                do{
                    nums[l++] = num%13;
                    num/=13;    
                }while(num);
                if(l==2){
                    if(nums[0]!=0){
                        cout<<strs_1[nums[1]]<<" ";
                        cout<<strs[nums[0]]<<endl;
                    }else{
                        cout<<strs_1[nums[1]]<<endl;
                    }
                
                }else if(l==1){
                    cout<<strs[nums[0]]<<endl;
                }
            }else if(k[0]>='a'&&k[0]<='z'){
                if(k.length()>3){
                    for(int i=0;i<3;i++){
                        s1 += k[i];
                    }
                    for(int i=4;i<k.length();i++){
                        s2 += k[i];
                    }
                    for(int i=0; i<13; i++){
                        if(s1==strs_1[i]){
                            nums[0] = i;
                        }
                        if(s2==strs[i]){
                            nums[1] = i;
                        }
                    }
                    cout<<nums[0]*13+nums[1]<<endl;        
                }else{
                    for(int i=0; i<13; i++){
                        if(k==strs_1[i]){
                            cout<<i*13<<endl;
                            break;
                        }
                        if(k==strs[i]){
                            cout<<i<<endl;
                            break;
                        }
                    }
                }    
            }
        }
        return 0;
    }
  • 相关阅读:
    7.21 高博教育 数组 内存
    【基础扎实】Python操作Excel三模块
    PAT 甲级 1012 The Best Rank
    PAT 甲级 1011  World Cup Betting
    PAT 甲级 1010 Radix
    链式线性表——实验及提升训练
    循环程序设计能力自测
    链表应用能力自测
    PAT 甲级 1009 Product of Polynomials
    1008 Elevator (20分)
  • 原文地址:https://www.cnblogs.com/wysAC666/p/9912157.html
Copyright © 2011-2022 走看看