欧拉计划 19:计算星期日,Java
Project Euler 19: Counting Sundays, Java
我正在使用 Java 的日历 API 来计算每月第一天的星期日总数。
以下代码为指定的日期格式 (Year/Month/Date) 的指定开始日期和结束日期提供了额外的 1 天。 1900/01/01 至 1910/01/01
代码的输入格式为:
1<=测试用例<=10
开始日期
结束日期
import java.io.*;
import java.util.*;
import java.time.DayOfWeek;
public class ProjectEuler19 {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner scanner = new Scanner(System.in);
int testCases = scanner.nextInt();
do{
int sundays = 0;
Calendar c = Calendar.getInstance();
int monthStart,dateStart,monthEnd,dateEnd;
int yearStart,yearEnd;
yearStart = scanner.nextInt();
monthStart = scanner.nextInt();
dateStart = scanner.nextInt();
yearEnd = scanner.nextInt();
monthEnd = scanner.nextInt();
dateEnd = scanner.nextInt();
String[] getDayOfWeek = new String[]{
"MONDAY",
"TUESDAY",
"WEDNESDAY",
"THURSDAY",
"FRIDAY",
"SATURDAY",
"SUNDAY"
};
for(int y = yearStart; y<=yearEnd; y++) {
for(int m = monthStart; m<=12; m++) {
c.set(y,m-1,1);
if(String.valueOf(getDayOfWeek[c.get(Calendar.DAY_OF_WEEK)-1]).equals(String.valueOf(DayOfWeek.SUNDAY))) {
sundays++;
}
if(m > monthEnd && y == yearEnd)
break;
}
}
System.out.println(sundays);
testCases--;
}while(testCases != 0 && testCases>=1 && testCases<=100);
}
}
样本输出是:
2
1900 1 1
1910 1 1
17
2000 1 1
2020 1 1
36
根据日历,1900 年到 1910 年有 18 个星期日,2000 年到 2010 年有 35 个星期日。
你其实是在数周一的个数。 Calendar.SUNDAY 是第一个星期常量,值为 1。
为什么不直接比较 c.get(Calendar.DAY_OF_WEEK) 和 Calendar.SUNDAY?
我正在使用 Java 的日历 API 来计算每月第一天的星期日总数。 以下代码为指定的日期格式 (Year/Month/Date) 的指定开始日期和结束日期提供了额外的 1 天。 1900/01/01 至 1910/01/01
代码的输入格式为:
1<=测试用例<=10
开始日期
结束日期
import java.io.*;
import java.util.*;
import java.time.DayOfWeek;
public class ProjectEuler19 {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner scanner = new Scanner(System.in);
int testCases = scanner.nextInt();
do{
int sundays = 0;
Calendar c = Calendar.getInstance();
int monthStart,dateStart,monthEnd,dateEnd;
int yearStart,yearEnd;
yearStart = scanner.nextInt();
monthStart = scanner.nextInt();
dateStart = scanner.nextInt();
yearEnd = scanner.nextInt();
monthEnd = scanner.nextInt();
dateEnd = scanner.nextInt();
String[] getDayOfWeek = new String[]{
"MONDAY",
"TUESDAY",
"WEDNESDAY",
"THURSDAY",
"FRIDAY",
"SATURDAY",
"SUNDAY"
};
for(int y = yearStart; y<=yearEnd; y++) {
for(int m = monthStart; m<=12; m++) {
c.set(y,m-1,1);
if(String.valueOf(getDayOfWeek[c.get(Calendar.DAY_OF_WEEK)-1]).equals(String.valueOf(DayOfWeek.SUNDAY))) {
sundays++;
}
if(m > monthEnd && y == yearEnd)
break;
}
}
System.out.println(sundays);
testCases--;
}while(testCases != 0 && testCases>=1 && testCases<=100);
}
}
样本输出是:
2
1900 1 1
1910 1 1
17
2000 1 1
2020 1 1
36
根据日历,1900 年到 1910 年有 18 个星期日,2000 年到 2010 年有 35 个星期日。
你其实是在数周一的个数。 Calendar.SUNDAY 是第一个星期常量,值为 1。
为什么不直接比较 c.get(Calendar.DAY_OF_WEEK) 和 Calendar.SUNDAY?