PTA 1100 Mars Numbers

本文介绍了一个程序,用于在地球的十进制数字系统和火星的十三进制数字系统之间进行转换。火星数字系统采用独特的命名方式,包括'tret'表示零,'jan'到'dec'表示1到12,以及'tam'到'jou'表示更高的数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

People on Mars count their numbers with base 13:

  • Zero on Earth is called "tret" on Mars.
  • The numbers 1 to 12 on Earch is called "jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec" on Mars, respectively.
  • For the next higher digit, Mars people name the 12 numbers as "tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou", respectively.

For examples, the number 29 on Earth is called "hel mar" on Mars; and "elo nov" on Mars corresponds to 115 on Earth. In order to help communication between people from these two planets, you are supposed to write a program for mutual translation between Earth and Mars number systems.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (<100). Then N lines follow, each contains a number in [0, 169), given either in the form of an Earth number, or that of Mars.

Output Specification:

For each number, print in a line the corresponding number in the other language.

Sample Input:

4
29
5
elo nov
tam

Sample Output:

hel mar
may
115
13

题目大意:

数字转换,把十进制数字转化为火星文,或者把火星文转化为十进制数字【具体火星文上面有给出,三行分别是0,低位火星文1-12(可以理解为个位数),高位火星文1-12(就类似于235中的2和3)】

题目解析:

这个代码写起来有点啰嗦,被我改来改去我的代码已经改成有点诡异的样子了,有一个坑,就是注意一下当输入tam的时候应该输出13,而当输入13的时候也应该输出tam而不是tam zret 

 

贴代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include<algorithm>
#include <cmath>
#include<queue>
#include<map>
#include<stack>
#include<sstream>
using namespace std;

int main()
{
    char low[13][13] = {"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
    char high[13][13] = {"tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
    int n;
    string s;
    cin >> n;
    stringstream ss;
    int t;
    getchar();
    for(int i= 0; i < n; i ++)
    {
        getline(cin,s);
        int ans = 0;
        int l = s.length();
        ss << s;
        if('0' <= s[0] && s[0] <= '9')
        {
            ss >> t;
            //cout << t << endl;

            if(t < 13)cout << low[t] <<endl;
            else
            {
                cout << high[t/13-1] ;
                t%=13;
                if(t!=0)
                cout << " " << low[t] ;
                cout << endl;
            }
            

        }
        else
        {
            ss >> s;
            int j;
            if(l <= 4)
            {
                for(j = 0; j < 13; j ++)
                {
                    int k = 0;
                    for(k = 0; k < s.length(); k ++)
                    {
                        if(s[k] != low[j][k])break;
                    }
                    if(k == s.length())
                    {
                        cout << j << endl;
                        break;
                    }
                }
                for(j = 0; j < 13; j ++)
                {
                    int k = 0;
                    for(k = 0; k < s.length(); k ++)
                    {
                        if(s[k] != high[j][k])break;
                    }
                    if(k == s.length())
                    {
                        cout << (j+1)*13 << endl;
                        break;
                    }
                }
            }
            else
            {
                for(j = 0; j < 13; j ++)
                {
                    int k = 0;
                    for(k = 0; k < s.length(); k ++)
                    {
                        if(s[k] != high[j][k])break;
                    }
                    if(k == s.length())
                    {
                        ans = (j+1)*13;
                        break;
                    }
                }
                ss >> s;
                for(j = 0; j < 13; j ++)
                {
                    int k = 0;
                    for(k = 0; k < s.length(); k ++)
                    {
                        if(s[k] != low[j][k])break;
                    }
                    if(k == s.length())
                    {
                        cout << ans + j << endl;
                        break;
                    }
                }
            }
        }
        ss.clear();
    }
    return 0;
}

 

### PTA 甲级 1100C 编程题解 #### 题目描述 PTA 甲级 1100C 的题目通常涉及较为复杂的算法和数据结构应用。虽然具体的题目细节未提供,但从常见的 PTA 甲级难度来看,这类题目可能涉及到动态规划、图论或其他高级算法。 #### 解决方案概述 对于此类高阶编程挑战,解决方案往往依赖于深入理解问题背景并灵活运用多种编程技巧来优化性能。下面给出一种假设性的解决框架: #### 基础逻辑构建 为了处理输入输出以及基本运算操作,可以采用如下方式初始化程序入口: ```c #include <stdio.h> int main() { // 输入读取部分 } ``` #### 数据预处理与核心算法实现 针对具体业务需求进行必要的参数校验及转换工作;随后进入主要计算流程,在此过程中可能会调用辅助函数完成特定任务。 如果该题目的目标是从给定数值逐步变换直至满足终止条件,则可借鉴类似的迭代过程[^3]: ```c // 定义递归或循环方法用于求解路径长度 int transform_steps(int value) { int steps = 0; while (value != target_condition) { // 替换为目标判断表达式 if ((value % divisor) == remainder) { value /= divisor; // 或其他变形规则 } else { value = apply_transformation(value); } ++steps; } return steps; } void solve_problem() { int initial_value; scanf("%d", &initial_value); printf("%d\n", transform_steps(initial_value)); } ``` #### 边界情况考虑 考虑到极端情况下可能出现的数据溢出等问题,应当加入适当的安全防护措施以确保代码健壮性。 #### 测试验证 最后通过一系列测试案例检验所写代码能否正确应对各种情形下的输入,并调整至最优状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值