原题链接:蓝桥杯算法提高VIP-任意年月日历输出
解题思路:
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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复