问题描述
已知2007年1月1日为星期一。设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。为完成此函数,设计必要的辅助函数也是必要的。
样例输入
一个满足题目要求的输入范例。
例:
2050 3
样例输出
与上面的样例输入对应的输出。
例:
思路:
主要就是找出那个月1号是星期几,就可以输出日历了。
#include <iostream>
#include <stdio.h>
using namespace std;
int isRun (int year)
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0 ))
return 1;
else
return 0;
}
int main ()
{
int iYear;
int iMonth;
cin >> iYear >> iMonth;
int week = 1;
int day = 1;
int mDay[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
for (int i = 0; i < iYear - 2007; ++i)
{
if (isRun(2007 + i))
day = day + 366;
else
day += 365;
week = (week + day - 1) % 7;
day = 1;
}
if (!week)
week = 7;
for (int i = 0; i < iMonth-1; ++i)
{
day = day + mDay[i];
week = (week + day - 1) % 7;
day = 1;
}
cout << "Calendar " << iYear << " - ";
if (iMonth < 10)
cout << "0";
cout << iMonth << endl;
cout << "---------------------" << endl;
cout << "Su Mo Tu We Th Fr Sa" << endl;
cout << "---------------------" << endl;
for (int i = 0; i < week; ++i)
cout << " ";
for (int i = 1; i <= mDay[iMonth-1]; ++i)
{
printf("%2d ", i);
week++;
if (week == 7)
{
cout << endl;
week = 0;
}
}
cout << endl;
cout << "---------------------" << endl;
return 0;
}