解题思路:
1.找到这一年一月份是从星期几开始,计算方法求365或366的余数即可
2.计算这个月之前有多少天,计算出这个月从星期几开始,
3.输出记得到了星期6换行,最后一行不换行


注意事项:





参考代码:

import java.util.Scanner;

public class 任意年月日历输出 {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		int year=in.nextInt();
		int month=in.nextInt();
		int y=2007;int m=1;int week=1;
		while(y<year){
			if((y%4==0&&y%100!=0)||y%400==0)//闰年366天
			{week=week+366%7;}//下一年一月份开始从星期week开始。
			
			else week=week+365%7;
			y++;
		}
		System.out.println("---------------------");
		System.out.println(" Su Mo Tu We Th Fr Sa");
		System.out.println("---------------------");
	//计算这个月之前有多少天
		int temp=0;
		while(m<month){
		if(m==1)temp=31;
		if(m==2){
			if(((y%4==0&&y%100!=0)||y%400==0)) temp+=29;
				else temp+=28;
			}
		if(m==3)temp+=31;
		if(m==4)temp+=30;
		if(m==5)temp+=31;
		if(m==6)temp+=30;
		if(m==7)temp+=31;
		if(m==8)temp+=31;
		if(m==9)temp+=30;
		if(m==10)temp+=31;
		if(m==11)temp+=30;
		if(m==12)temp+=31;
		m++;
		}
		week=(week+temp%7)%7;//计算这个月第一天星期数
			int day=1;temp=-1;//因为第一个输出是星期日
			
			if(((y%4==0&&y%100!=0)||y%400==0)&&m==2){//当这年是闰年且是二月份
				while(++temp<week){System.out.print("   ");}
				System.out.printf("%3d",day);week++;
				while(++day<=29){
					System.out.printf("%3d",day);
					if(week==6&&day!=29)System.out.println();
					
					week++;week=week%7;
				}
			}
			else if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
				
				while(++temp<week){System.out.print("   ");}
				System.out.printf("%3d",day);week++;
				while(++day<=31){
					System.out.printf("%3d",day);
					if(week==6&&day!=31)System.out.println();
					week++;week=week%7;
				}
			}
			else if(m==4||m==6||m==9||m==11){
				while(++temp<week){System.out.print("   ");}
				System.out.printf("%3d",day);week++;
				while(++day<=30){
					System.out.printf("%3d",day);
					if(week==6&&day!=30)System.out.println();
					week++;week=week%7;
				}
			}
			else{
				while(++temp<week){System.out.print("   ");}
				System.out.printf("%3d",day);week++;
				while(++day<=28){
					System.out.printf("%3d",day);
					if(week==6&&day!=28)System.out.println();
					
					week++;week=week%7;
				}
			}
			System.out.println();
			System.out.print("---------------------");
		
		 
	}

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论