C++实现打印一年中所有的星期三

来源:互联网 发布:淘宝网商城女童鞋 编辑:程序博客网 时间:2024/06/07 01:59

直接上代码 给定初始日期 2000年1月1日 是星期六

#include <iostream>#include <map>using namespace std;//2000年的1月1日是星期六//打印给定年所有的星期三map<int, int> Construct(int year){map<int, int>m;int a[] = { 1, 3, 5, 7, 8, 10, 12 };int b[] = { 4, 6, 9, 11 };for (int i = 0; i < 7; ++i)m.insert(pair<int, int>(a[i], 31));for (int i = 0; i < 4; ++i)m.insert(pair<int, int>(b[i], 30));if (year % 4 == 0)m.insert(pair<int, int>(2, 29));elsem.insert(pair<int, int>(2, 28));return m;}//求出给定年的1月1日是星期几int CalWeekDay(int year){int weekday, DistanceDay = 0;//2000年的1月1日是星期六for (int i = 2000; i < year; ++i){if (i % 4 == 0)DistanceDay += 366;elseDistanceDay += 365;}int left = DistanceDay % 7;int temp = left + 6;if (temp <= 7)weekday = temp;elseweekday = temp - 7;return weekday;}int FirstDate(int InitWeekDay, int day){int FirstResult = 0;if (InitWeekDay > day)FirstResult = 7 - (InitWeekDay - day) + 1;else if (InitWeekDay < day)FirstResult = day - InitWeekDay + 1;elseFirstResult = 1;return FirstResult;}int main(){int year, day;while (cin >> year >> day){map<int, int>m;int FirstResult = 0;m = Construct(year);//求出给定年的1月1日是星期几int InitWeekDay = CalWeekDay(year);FirstResult = FirstDate(InitWeekDay, day);//打印出给定该年中所有的星期三cout << year << "年所有星期" << day << "的有:" << endl;for (auto p = m.begin(); p != m.end(); ++p){cout << p->first << "月";for (int i = FirstResult; i <= p->second; i = i + 7)cout << i << " ";//求出下个月第一个满足的日期是当月第几天int Dis = p->second - FirstResult;int InitDay = 0;int SumDay = Dis % 7 + day + 1;if (SumDay <= 7)InitDay = SumDay;elseInitDay = SumDay - 7;FirstResult = FirstDate(InitDay, day);cout << endl;}}return 0;}


1 0