PAT1044_Basic_火星数字(未满分,需改进)

wuchangjian2021-11-04 20:48:43编程学习

 

#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;
		}
	}
}

 

相关文章

Salesforce时间日期类型(一)

时间日期知识: 时间日期常用对象:Datetime,Tim...

1080p显示器与2k的差别究竟有多大?该如何选择

所谓分辨率,即显示器能显示多少个“像素点”,如1080p显示...

深度学习核心技术精讲100篇(八十一)-NLP预训练模型ERNIE实战应用案例

前言 基于飞桨开源的持续学习的语义理解框架ERNIE 2.0,及基于此框架的ERNIE...

数字结合体输出个数

给定数组大小 #include<stdio.h> int main() {...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。