DR


私信TA

用户名:13532367545

访问量:1256

签 名:

等  级
排  名 11697
经  验 1013
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 广东财经大学华商学院
专  业

  自我简介:

解题思路:整个程序的思路是先确定那一年的1月1号是星期几,用k记录 ,然后再从那一年的一月推到指定月份的一号是星期几,依然用k记录  k的范围大小是0-6,0代表星期天

注意事项:

参考代码:

#include<iostream>
#include<iomanip>
using namespace std;
bool cmp(int x){
	if(x%4==0&&x%100!=0) return true;
	else if(x%400==0) return true;
    else return false;
}
int cmp2(int x){
	if(x==1||x==3||x==5||x==7||x==8||x==10||x==12) return 1;
	else if(x==2) return 2;
	else return 0;
}
int main(){
	int year,month,k=1,z=1,days;    //整个程序的思路是先确定那一年的1月1号是星期几,用k记录 ,然后再从那一年的一月推到指定月份的一号是星期几,依然用k记录  k的范围大小是0-6,0代表星期天 
	cin>>year>>month;
	for(int i=2007;i<year;++i){    
		if(cmp(i)) k+=2;     // 如果成立就代表着那一年为闰年,闰年366天,366余7=2,意味着下一年的一月一号是上一年的往后推两天。 
		else k++;            //否则为平年365天,365余7=1,下一年的一月一号是上一年往后推一天 
		if(k>6) k-=7;       //k代表者星期,若k'大于6等于7时,那么就让k等于0,意味着改天为星期天 
	}         //这个for循环结束后,就可以得到该年的一月一号是星期几 
	for(int j=1;j<month;++j){      //同理由一月推到指定月份时,看是星期几 
		if(cmp2(j)==1) k+=3;    //如果是奇数月则一个月有31天,31余7等于3,下个月一号星期就是这个月一号星期往后推三天。同理判断出偶数月和闰年2月和平年2月的变化情况 
		else if(cmp2(j)==2&&cmp(year)) k++;     //闰年2月 
		else if(cmp2(j)==0) k+=2;         //除二月的偶数月,平年的二月有28天,余7等于0,不用做变化。 
		if(k>6) k-=7;
	}
	if(cmp2(month)==1) days=31;     //这四行语句判断这月有多少天 
	else if(cmp2(month)==2&&cmp(year)) days=29;
	else if(cmp2(month)==0) days=30;
	else days=28;
	cout<<"---------------------"<<endl;
	cout<<" Su Mo Tu We Th Fr Sa"<<endl;
	cout<<"---------------------"<<endl;
	for(int i=0;i<k;++i)      //根据k值知道该月一号为星期几,注意空格大小,前面直接输出几个 空格就好 
	cout<<"   ";
	for(int z=1;z<=days;++z){
		if(k>6){ 
			k-=7;
			cout<<endl;         //当k大于6等于7时,输出回车 
		}
		cout<<" "<<setw(2)<<z;  //每次输出前输入一个空格,且控制两个空间输出且向右靠齐输出 
		k++;
	}
	cout<<endl<<"---------------------";
	return 0;
}


 

0.0分

4 人评分

  评论区

  • «
  • »