找一个标志日期(代码中是用2021年10月27为标记日期,当天是周三,也可以用其它日期作为标记日期),然后计算输入年月的1号跟标志日期之间的天数,就可以得到输入年月1号的星期。然后每7天1行输出就可以了。
运行结果:
代码:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int year, mon;
int i, j, cnt = 0;
int t = 1, k = 1;
int arr[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int curYear, curMon, curDay, wk;
curYear = 2021;
curMon = 10;
curDay = 27;
wk = 3;
cin >> year >> mon;
if (curYear >= year)
{
for (i = mon; i <= 12; i++)
{
if (i == 2)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
cnt += 29;
else
cnt += 28;
}
else
cnt += arr[i];
}
for (i = year + 1; i < curYear; i++)
{
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
cnt += 366;
else
cnt += 365;
}
for (i = 1; i < curMon; i++)
{
if (i == 2)
{
if (curYear % 4 == 0 && curYear % 100 != 0 || curYear % 400 == 0)
cnt += 29;
else
cnt += 28;
}
else
cnt += arr[i];
}
cnt += curDay;
wk = 7 - (wk + cnt) % 7;
}
else
{
for (i = curMon + 1; i <= 12; i++)
{
if (i == 2)
{
if (curYear % 4 == 0 && curYear % 100 != 0 || curYear % 400 == 0)
cnt += 29;
else
cnt += 28;
}
else
cnt += arr[i];
}
for (i = curYear + 1; i < year; i++)
{
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
cnt += 366;
else
cnt += 365;
}
for (i = 1; i < mon; i++)
{
if (i == 2)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
cnt += 29;
else
cnt += 28;
}
else
cnt += arr[i];
}
cnt += curDay;
wk = (wk + cnt - 1) % 7;
}
//printf("一 二 三 四 五 六 日\n");
cout << "Sun Mon Tus Wed Thu Fri Sat" << endl;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) arr[2] = 29;
while (t <= arr[mon])
{
if (k < wk+1)
{
cout << " ";
}
else
{
cout << setw(3) << t ;
t++;
}
cout << " ";
if (k % 7 == 0) cout << endl;
k++;
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!