[C/C++] 算法提高 5-3日历

来源:互联网 发布:凤岗数控车床编程培训 编辑:程序博客网 时间:2024/05/17 18:26
问题描述  已知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;}