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

问题描述
  已知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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值