PAT1044_Basic_火星数字(未满分,需改进)
#include<iostream>
using namespace std;
#include<string>
#include<string.h>
int main() {
int n = 0;
cin >> n;
char s[50];
int num = 0;
//char s[][]与string s[]是表示相同
char str1[13][4] = { "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou","0" };
char str2[13][5] = { "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec","tret" };
int a = 0;
int flag = 0;
int k = 0;
for (int j = 0; j < n; j++) {
getchar();
cin.get(s, 50);
if (s[0] <= 57) {
//即为地球文
for (int i = 0; i < strlen(s); i++) {
//将字符转化成整形
num = s[i] - '0' + num * 10;
}
int m = 1;
if (num > 13) {
flag = 1;
m = 2;
}
while (m--) {
if (flag) {
a = num / 13;
for (int i = 1; i < 14; i++) {
if (a == i) {
cout << str1[i - 1] << " ";
flag = 0;
}
}
}
else {
a = num % 13;
for (int i = 1; i < 14; i++) {
if (a == i) {
cout << str2[i - 1] << endl;
}
}
}
}
num = 0;
}
else if (s[0] >= 97) {
char s1[50];
char s2[50];
//进行分段,从空格开始,分成两段
if (s[3] == ' ') {
k = 1;
//将前三项给s1
for (int i = 0; i < 3; i++) {
s1[i] = s[i];
}
s1[3] = '\0';
//后三项给s2
for (int i = 4; i < 8; i++) {
s2[i - 4] = s[i];
}
}
else {
strcpy_s(s2, s);
}
//开始火星文翻译
//两个火星文组成数字处理
if (k) {
//对第一段数字的处理
for (int i = 1; i < 14; i++) {
if (strcmp(s1, str1[i - 1]) == 0) {
num += i * 13;
}
}
//对第二段文字的处理
for (int i = 0; i < 14; i++) {
if (strcmp(s2, str2[i - 1]) == 0) {
//这个区段有必要加这个为0判断吗?
if (i == 13) {
i = 0;
}
num += i * 1;
}
}
}
//一个火星文组成数字处理
else {
for (int i = 1; i < 14; i++) {
if (strcmp(s2, str2[i - 1]) == 0) {
if (i == 13) {
i = 0;
}
num += i * 1;
}
else if (strcmp(s2, str1[i - 1]) == 0) {
num += i * 13;
}
}
}
cout << num << endl;
num = 0;
k = 0;
}
}
}