链接:https://www.nowcoder.com/questionTerminal/d95d98a2f96e49078cd7df84ba0c9d79 来源:牛客网
和中国的节日不同,美国的节假日通常是选择某个月的第几个星期几这种形式,因此每一年的放假日期都不相同。具体规则如下:
- 1月1日:元旦
- 1月的第三个星期一:马丁·路德·金纪念日
- 2月的第三个星期一:总统节
- 5月的最后一个星期一:阵亡将士纪念日
- 7月4日:美国国庆
- 9月的第一个星期一:劳动节
- 11月的第四个星期四:感恩节
- 12月25日:圣诞节
现在给出一个年份,请你帮忙生成当年节日的日期
示例: 案列已全部通过
import java.util.*;
public class Main{
public static boolean isRn(int year) {
if(((year%4==0)&&year%100!=0)||(year%400==0)){
return true;
}
return false;
}
public static int day_of_week(int year, int month, int day)
{
if (month == 1 || month == 2)
{
month += 12;
year -= 1;
}
int century = year / 100;
year %= 100;
int week = year + (year / 4) + (century / 4) - 2 * century + 26 * (month + 1) / 10 + day -
1;
week = (week % 7 + 7) % 7;
if (week == 0)
{
week = 7;
}
return week;
}
public static void printFunc(int y,int m,int d) {
String str1="-";
String str2="-";
boolean f1=false;
boolean f2=false;
if(m/10==0){
f1=true;
str1+=0;
}
if(d/10==0){
f2=true;
str2+=0;
}
System.out.println(y + str1 + m + str2 + d);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int y = scanner.nextInt();
boolean f=isRn(y);
for (int m = 1; m <= 12; ) {
int x = 0;
if (m % 2 == 0) {
if (m == 2) {
if (f) {
x = 29;
} else {
x = 28;
}
} else {
x = 30;
}
} else {
x = 31;
}
int tmp=day_of_week(y,m,1);
boolean flg=false;
for (int d = 1; d <= x; d++) {
int j=(d+tmp)/7+1;
int w = day_of_week(y,m,d);
if ((m == 1 && d == 1) || (m == 7 && d == 4) || (m == 12 && d == 25)) {
if(m<10){
System.out.println(y + "-0" + m + "-0" + d);
}else{
System.out.println(y + "-" + m + "-" + d);
}
continue;
} else if (m == 1 && w == 1) {
if(1<tmp){
if(4==j){
printFunc(y,m,d);
}
}else{
if(3==j){
printFunc(y,m,d);
}
}
} else if (m == 2 && w == 1) {
if(1<tmp){
if(4==j){
printFunc(y,m,d);
}
}else{
if(3==j){
printFunc(y,m,d);
}
}
} else if (m == 5 && w == 1) {
int k=0;
for(int a=0;a<7;a++){
if (flg==true){
break;
}
if(day_of_week(y,5,31-a)==1){
printFunc(y,m,31-a);
flg=true;
}
}
} else if (m == 9 && w == 1) {
if(1<tmp){
if(2==j){
printFunc(y,m,d);
}
}else{
if(1==j){
printFunc(y,m,d);
}
}
} else if (m == 11 && w == 4) {
if(4<tmp){
if(5==j){
printFunc(y,m,d);
}
}else{
if(4==j){
printFunc(y,m,d);
}
}
}
}
m++;
}
System.out.println();
}
}
}
|