1044 火星数字

最最严重的问题,
如果字符串只有一个的时候不一定就是个位,也可能是十位,这要取决于在哪个数组中出现。
还有如果是数字,比如13,那么十位是1,个位是0没问题吧,按照平时应该输出tam tret,但是这题的要求是只输出tam即可。
所以也要在代码里面特判。
我真的想吐槽C++字符串处理,java明明一个split搞定的东西,搁这截他妈的半天。

#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
#define ll long long
string ge[] = {"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep","oct", "nov", "dec"};
string shi[] = {" ","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
using namespace std;
int main() {
	int n;
	cin>>n;
	string t;
	getline(cin,t);
	for(int i=0; i<n; i++) {
		string s;
		getline(cin,s);
		if(isdigit(s[0])) {
			int shuzi = stoi(s);
			int g = shuzi % 13;
			int s = shuzi / 13;
			if(s && g) {
				cout << shi[s] << " " << ge[g] << '\n';
			}else if(s){
				cout << shi[s] << '\n';
			}else if(g){
				cout << ge[g] << '\n';
			}else{
				cout << ge[0] << '\n';
			}
		} else {
			stringstream is(s);
			vector<string> vec;
			while(getline(is,s,' ')){
			   vec.push_back(s);
			}
			int res = 0;
			if(vec.size()==1){
				for(int j=0;j<=12;j++){
				    if(ge[j]==vec[0]){
				    	res += j;
				    	break;
					}
				}
				for(int j=1;j<=12;j++){
					if(shi[j]==vec[0]){
						res += j * 13;
						break;
					}
				}
			}else{
                for(int j=1;j<=12;j++){
                	if(shi[j]==vec[0]){
                		res += j * 13;
						break; 
					}
				}
				for(int j=0;j<=12;j++){
					if(ge[j]==vec[1]){
						res += j;
						break;
					}
				}
			}
			cout << res << '\n';
		}
	}
	return 0;
}

posted @ 2024-04-18 10:10  YuKiCheng  阅读(7)  评论(0编辑  收藏  举报