问题:
解题关键:
1.找到月历开始那天对应周几
2.能够按照格式正确输出
解决一:以1920.1.1为起始天,计算输入月第一天距起始天天数,对7取余,即得
int y,m,d=4,year,day=1;
cin>>y>>m;
year=1920;//起始天
for(int i=year+1;i<y;i++){
if(i%4==0&&i%100!=0||i%400==0){
d+=366;//以年为单位,注意闰年
}
else
d+=365;
}
int A[12]={31,28,31,30,31,30,31,31,30,31,30,31};//以月为单位,注意二月
if(year%4==0&&year%100!=0||year%400==0)A[1]++;
for(int i=0;i<m;i++){
d+=A[i];
}
d++;
d=d%7;
if(d==0)d==7;//注意周日特例
解决二:
1.换行:for循环解决
2.起始空格,与星期几对应找出空格数
3.相邻两天间空格:注意个位数与双位数不同
cout<<"Sun Mon Tus Wed Thu Fri Sat\n";
for(int t=1;t<d;t++){
cout<<" ";
}//起始空天(四个空格
for(int i=0;i<6;i++){
for(;d<=7;d++){
if(day>A[m-1])break;
if(day<10)cout<<" "<<day<<" ";
else cout<<" "<<day<<" ";
day++;
}
cout<<"\n";//每周结束后换行
d=1;//重置周的循环
祝您写的愉快~