题目:点击打开链接
题目大意:
内容:
输入年份和月份,输出日历表!
附注:由于公元日历的编排,每400年是一个大周期,在400年中设置97个闰年,于是2001年与1年的1月1日都是星期一,对于输入的年号y,y年的1月1日是w,其中w = s mod 7 的余数,0 代表周日,那么s的值如何计算呢?s=y-1+[(y-1)/4]-[(y-1)/100]+[(y-1)/400]+1
附注:由于公元日历的编排,每400年是一个大周期,在400年中设置97个闰年,于是2001年与1年的1月1日都是星期一,对于输入的年号y,y年的1月1日是w,其中w = s mod 7 的余数,0 代表周日,那么s的值如何计算呢?s=y-1+[(y-1)/4]-[(y-1)/100]+[(y-1)/400]+1
输入说明:
一行两个整数,代表年份和月份(不需要判错)
输出说明:
第一行,星期的标志,每个占4位
若干行,每行7个整数(代表周日至周六),每个整数占4位字符空间。
输入样例:
2009 7
输出样例 :
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
#include<iostream>
using namespace std;
int main()
{
int Year,Month;
cin>>Year>>Month;
int s=Year-1+((Year-1)/4)-((Year-1)/100)+((Year-1)/400)+1;
int w=s%7;
int Array[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //保存一年十二个月的天数
if((Year%4==0&&Year%100!=0)||(Year%400==0)) //判断闰年
Array[2]=29;
int sum=0;
for(int i=1;i<Month;i++)
sum+=Array[i];
w=w+sum%7;
w=(w>7)?(w-7):w; //判断星期几
cout<<"Sun Mon Tue Wed Thu Fri Sat"<<endl;
for(int i=0;i<=w;i++)
cout<<" "; //①
for(int i=1;i<=Array[Month];i++)
{
if(w%7==0)
cout<<endl;
if(i<10)
cout<<" "; //②(①,② 用于调节输出格式
cout<<i<<" ";
w++;
}
return 0;
}
注意:
原题目中的输出样例是不对的,我刚开始按那个格式是那几次都WA了,它一定要严格按照对应的位置输出!!!
希望对你有用。