U E D R , A S I H C RSS

만년달력/손동일,aekae

만년달력

~cpp 
#include <iostream>
using namespace std;

int main()
{
	int year,month;

	cin >> year >> month;	// 입력받음

	int i,j,a;

	int arr[6][7]={{'0',},}; 

	int ThirtyOne=0;		

	for (i=1; i<month; i++)		// ThirtyOne : month 이전의 달에서 31일이 있는 달의 갯수
		if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)
			ThirtyOne++;
	
	if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
		a = 31;
	else if (month == 4 || month == 6 || month == 9 || month == 11)
		a = 30;
	else
		a = 0;					// a : 몇 월이 몇 일 까지 있는가.
	
	int two = year / 4 - year / 100 + year / 400;	 // year 이전에 윤년의 갯수

	int XOR;

	if (month > 2)					// 윤년인지 평년인지 
	{
		if (year % 4 == 0)
		{
			if (year % 100 == 0)
			{
				if (year % 400 == 0)
				{
					XOR = +1;
					if (a==0)
					a = 29;
				}
				else
				{
					XOR = +2;
					if (a==0)
					a = 28;
				}
			}
		}
		else
		{
			XOR = +2;
			if (a==0)
			a = 28;
		}
	}
	
	// first를  // 1년 1
	int day = (((year-1) * 365 + two) + ((month-1) * 30 + ThirtyOne - XOR)) % 7;

	int first = day + 1;
	
	if (first == 7)
		first = 0;
	
	int y = 1;			// 일.. 1-28,29,30,31

	i=0;

	int first_ = first;

	for (first; first<7; first++)		// 첫번째 줄의 배열 값 입력
	{
		arr[i][first] =y;
		y++;
	}
	
	for (i=1; i<6; i++)					// 두번째 줄 이후의 배열 값 입력
	{
		for (j=0; j<7; j++) 	//first는 1+ 전체 합 나누기 7의 나머지..
		{
			arr[i][j] = y;
			y++;
		}
	}
		
	cout << "일\t월\t화\t수\t목\t금\t토" << endl;
	cout << "-----------------------------------------------------" << endl;
	
	i=0;

	for(int h=0; h<first_; h++)
		cout << "\t";

	for (first_; first_<7; first_++)		// 첫번째 줄의 배열 값 출력
	{
		cout << arr[i][first_] << "\t";
	}
	
	cout << "\n";

	for (i=1; i<6; i++)					// 두번째 줄 이후의 배열 값 출력
	{
		for (j=0; j<7; j++)		//first는 1+ 전체 합 나누기 7의 나머지..
		{
			if (arr[i][j] >	a)
			{
				cout << "\n";
				return 0;
			} 
			cout << arr[i][j] << "\t";
		}
		cout << "\n";
	}
	return 0;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:25
Processing time 0.0183 sec