这是一个很坑的地方
输入是
4
29
5
elo nov
tam
第一步cin>>4之后
要加一步getline,把4这行读取了。然后再按行读取内容
因为getline是从第一行“4”开始读取的,如果不注意,会造成错误
#include <iostream>
#include"stdlib.h"
#include <vector>
#include <string>
#include <cstdio>
//scanf printf防止超时
#include <algorithm>
//vector的sort
#include <sstream>
//转换
using namespace std;
#include<iomanip>
//精度
#include<cmath>
//round四舍五入取整
int main()
{
int num;
cin>>num;
vector<string> strs;
string low[13]= {"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"};
string high[13]={"tret","tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};
string s;
getline(cin,s);
for(int i=0;i<num;i++)
{
string str;
getline(cin,str);
if(str[0]>=‘0‘&&str[0]<=‘9‘)
{
stringstream ss;
ss<<str;
int temp;
ss>>temp;
int n1=temp/13;
int n2=temp%13;
if(temp<13)
{
cout<<low[n2]<<endl;
}else if(n2==0)
{
cout<<high[n1]<<endl;
}else
{
cout<<high[n1]<<" "<<low[n2]<<endl;
}
}else if(str.length()==3)
{
if(str=="tret")
cout<<0<<endl;
for(int i=1;i<13;i++)
{
if(str==low[i])
{
cout<<i<<endl;
}
if(str==high[i])
{
cout<<i*13<<endl;
}
}
}
else{
int sum=0;
for(int i=1;i<13;i++)
{
if(str.substr(0,3)==high[i])
{
sum+=i*13;
}
if(str.substr(4,3)==low[i])
{
sum+=i;
}
}
cout<<sum<<endl;
}
}
return 0;
}
PAT(Basic Level) Practice : 1044 火星数字 (20分)
原文:https://www.cnblogs.com/zchq/p/13727572.html