POJ1008解题报告

中文题。大概意思就是日历A按照某某方式计算(每年365天),日历B按照某某方式计算(每年260天),现在给出日历A的某一个日子(年月日)要求你转换成日历B的某一个日子。思路就是按照日历A的方式计算出一共多少天,然后再按照日历B的方式该除的除,该取模的取模。

题目不难,细节要注意。

1.Tzolkin历法的月和日是分开计算的。之前一直出错,是因为单纯的把这个历法的计算方式理解为一年分为13个月每个月20天,所以在求解的时候用的一下错误的算法:

Tzolkinmonth=(sum%260)/20;

正确的算法应该是:Tzolkinmonth=(sum%260)%13+1;

2.要首先输出你输入的数据量(就因为这个原因一直没有AC)。


代码如下:

/*
Arthur:	Near
Date:	2014/08/12
Note:	Poj1008
*/
#include <iostream>
#include <string>
using namespace std;
int GetHaabDays(int,string,int);//算出总天数
int main()
{
	int Haabday;
	string Haabmonth;
	int Haabyear;
	//Haab历法年月日定义
	int Tzolkinyear;
	int Tzolkinmonth;
	string Tzolkinday;
	//Tzolkin历法年月日定义
	
	int day;//用于计算Tzolkin日历下的天由此转换为String
	char Dot;//题目要求输入‘.’
	
	int n;
	int sum=0;
	cin>>n;
	cout<<n<<endl;
	while(n--)
	{
		cin>>Haabday>>Dot>>Haabmonth>>Haabyear;
		sum=GetHaabDays(Haabday,Haabmonth,Haabyear);
	//	cout << "sum="<<sum<<endl;
		Tzolkinyear=sum/260;
		Tzolkinmonth=(sum%260)%13+1;
		day=(sum%260)%20;
		switch(day)
		{
			case 0:Tzolkinday="imix";break;
			case 1:Tzolkinday="ik";break;
			case 2:Tzolkinday="akbal";break;
			case 3:Tzolkinday="kan";break;
			case 4:Tzolkinday="chicchan";break;
			case 5:Tzolkinday="cimi";break;
			case 6:Tzolkinday="manik";break;
			case 7:Tzolkinday="lamat";break;
			case 8:Tzolkinday="muluk";break;
			case 9:Tzolkinday="ok";break;
			case 10:Tzolkinday="chuen";break;
			case 11:Tzolkinday="eb";break;
			case 12:Tzolkinday="ben";break;
			case 13:Tzolkinday="ix";break;
			case 14:Tzolkinday="mem";break;
			case 15:Tzolkinday="cib";break;
			case 16:Tzolkinday="caban";break;
			case 17:Tzolkinday="eznab";break;
			case 18:Tzolkinday="canac";break;
			case 19:Tzolkinday="ahau";break;
		}
		cout<<Tzolkinmonth<<" "<<Tzolkinday<<" "<<Tzolkinyear<<endl;
	}
}

int GetHaabDays(int D,string M,int Y)
{
	int sum=0;
	int i;
	int monthday;
	int ASCII=0;
	for(i=0;i<M.size();i++)
	{
		ASCII+=(int)M[i];
	}
	//for(i=0;i<Y;)
	sum+=Y*365;
	switch(ASCII)
	{
		case 335:monthday= 1;break;//pop  
        case 221:monthday= 2;break;//no  
        case 339:monthday= 3;break;//zip  
        case 471:monthday= 4;break;//zotz  
        case 438:monthday= 5;break;//tzec  
        case 345:monthday= 6;break;//xul  
        case 674:monthday= 7;break;//yoxkin  
        case 328:monthday= 8;break;//mol  
        case 414:monthday= 9;break;//chen  
        case 338:monthday= 10;break;//yax  
        case 318:monthday= 11;break;//zac  
        case 304:monthday= 12;break;//ceh  
        case 305:monthday= 13;break;//mac  
        case 636:monthday= 14;break;//kankin  
        case 433:monthday= 15;break;//muan  
        case 329:monthday= 16;break;//pax  
        case 534:monthday= 17;break;//koyab  
        case 546:monthday= 18;break;//cumhu  
        case 552:monthday= 19;break;//uayet  	
	}
	sum+=(monthday-1)*20;
	sum+=D;
	return sum;
}


你可能感兴趣的:(poj1008)