📜  使用C++打印给定年份的日历

📅  最后修改于: 2021-05-25 19:17:04             🧑  作者: Mango

先决条件:查找给定日期的星期几

问题:打印任何给定年份的日历。该程序应能够打印任何输入年份的日历。

执行:

// A C++ Program to Implement a Calendar
// of an year
#include
using namespace std;
  
/*A Function that returns the index of the day
  of the date- day/month/year
  For e.g-
  
  Index     Day
  0         Sunday
  1         Monday
  2         Tuesday
  3         Wednesday
  4         Thursday
  5         Friday
  6         Saturday*/
int dayNumber(int day, int month, int year)
{
  
    static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1,
                       4, 6, 2, 4 };
    year -= month < 3;
    return ( year + year/4 - year/100 +
             year/400 + t[month-1] + day) % 7;
}
  
/*
  A Function that returns the name of the month
  with a given month number
  
  Month Number     Name
  0                January
  1                February
  2                March
  3                April
  4                May
  5                June
  6                July
  7                August
  8                September
  9                October
  10               November
  11               December */
string getMonthName(int monthNumber)
{
    string months[] = {"January", "February", "March",
                       "April", "May", "June",
                       "July", "August", "September",
                       "October", "November", "December"
                      };
  
    return (months[monthNumber]);
}
  
/* A Function to return the number of days in
   a month
  
  Month Number     Name        Number of Days
  0                January     31
  1                February    28 (non-leap) / 29 (leap)
  2                March       31
  3                April       30
  4                May         31
  5                June        30
  6                July        31
  7                August      31
  8                September   30
  9                October     31
  10               November    30
  11               December    31
  
*/
int numberOfDays (int monthNumber, int year)
{
    // January
    if (monthNumber == 0)
        return (31);
  
    // February
    if (monthNumber == 1)
    {
        // If the year is leap then February has
        // 29 days
        if (year % 400 == 0 ||
                (year % 4 == 0 && year % 100 != 0))
            return (29);
        else
            return (28);
    }
  
    // March
    if (monthNumber == 2)
        return (31);
  
    // April
    if (monthNumber == 3)
        return (30);
  
    // May
    if (monthNumber == 4)
        return (31);
  
    // June
    if (monthNumber == 5)
        return (30);
  
    // July
    if (monthNumber == 6)
        return (31);
  
    // August
    if (monthNumber == 7)
        return (31);
  
    // September
    if (monthNumber == 8)
        return (30);
  
    // October
    if (monthNumber == 9)
        return (31);
  
    // November
    if (monthNumber == 10)
        return (30);
  
    // December
    if (monthNumber == 11)
        return (31);
}
  
// Function to print the calendar of the given year
void printCalendar(int year)
{
    printf ("         Calendar - %d\n\n", year);
    int days;
  
    // Index of the day from 0 to 6
    int current = dayNumber (1, 1, year);
  
    // i --> Iterate through all the months
    // j --> Iterate through all the days of the
    //       month - i
    for (int i = 0; i < 12; i++)
    {
        days = numberOfDays (i, year);
  
        // Print the current month name
        printf("\n  ------------%s-------------\n",
               getMonthName (i).c_str());
  
        // Print the columns
        printf("  Sun  Mon  Tue  Wed  Thu  Fri  Sat\n");
  
        // Print appropriate spaces
        int k;
        for (k = 0; k < current; k++)
            printf("     ");
  
        for (int j = 1; j <= days; j++)
        {
            printf("%5d", j);
  
            if (++k > 6)
            {
                k = 0;
                printf("\n");
            }
        }
  
        if (k)
            printf("\n");
  
        current = k;
    }
  
    return;
}
  
// Driver Program to check above funtions
int main()
{
    int year = 2016;
    printCalendar(year);
  
    return (0);
}

输出:

Calendar - 2016


  ------------January-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                             1    2
    3    4    5    6    7    8    9
   10   11   12   13   14   15   16
   17   18   19   20   21   22   23
   24   25   26   27   28   29   30
   31

  ------------February-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
         1    2    3    4    5    6
    7    8    9   10   11   12   13
   14   15   16   17   18   19   20
   21   22   23   24   25   26   27
   28   29

  ------------March-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
              1    2    3    4    5
    6    7    8    9   10   11   12
   13   14   15   16   17   18   19
   20   21   22   23   24   25   26
   27   28   29   30   31

  ------------April-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                             1    2
    3    4    5    6    7    8    9
   10   11   12   13   14   15   16
   17   18   19   20   21   22   23
   24   25   26   27   28   29   30

  ------------May-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
    1    2    3    4    5    6    7
    8    9   10   11   12   13   14
   15   16   17   18   19   20   21
   22   23   24   25   26   27   28
   29   30   31

  ------------June-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                   1    2    3    4
    5    6    7    8    9   10   11
   12   13   14   15   16   17   18
   19   20   21   22   23   24   25
   26   27   28   29   30

  ------------July-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                             1    2
    3    4    5    6    7    8    9
   10   11   12   13   14   15   16
   17   18   19   20   21   22   23
   24   25   26   27   28   29   30
   31

  ------------August-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
         1    2    3    4    5    6
    7    8    9   10   11   12   13
   14   15   16   17   18   19   20
   21   22   23   24   25   26   27
   28   29   30   31

  ------------September-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                        1    2    3
    4    5    6    7    8    9   10
   11   12   13   14   15   16   17
   18   19   20   21   22   23   24
   25   26   27   28   29   30

  ------------October-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                                  1
    2    3    4    5    6    7    8
    9   10   11   12   13   14   15
   16   17   18   19   20   21   22
   23   24   25   26   27   28   29
   30   31

  ------------November-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
              1    2    3    4    5
    6    7    8    9   10   11   12
   13   14   15   16   17   18   19
   20   21   22   23   24   25   26
   27   28   29   30

  ------------December-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                        1    2    3
    4    5    6    7    8    9   10
   11   12   13   14   15   16   17
   18   19   20   21   22   23   24
   25   26   27   28   29   30   31

时间复杂度– O(1)。花费的时间不取决于输入的年份。在任何给定年份都是相同的。
辅助空间– O(1)

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”