java,如何计算公历年中最频繁的一天(1583年到4000年之间的年份)?

b5buobof  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(329)

我如何用java构建一个算法,当给定一年时,它将从该特定年份中找到一周中最频繁的一天?
前提条件:
星期一开始。
年份在1583年到4000年之间。
公历是公历。
示例:

  1. mostFrequentDays(2427) => {"Friday"}
  2. mostFrequentDays(2185) => {"Saturday"}
  3. mostFrequentDays(2860) => {"Thursday", "Friday"}

给定的是一个介于1583和4000之间的整数,该函数以字符串数组的形式返回最频繁的一天

  1. public static String[] mostFrequentDays(int year) {
  2. String[] day= new String[];
  3. return day;
  4. }
  5. public static boolean isGregorianLeapYear(int year) {
  6. boolean isLeap = false;
  7. if (year%4==0) isLeap = true;
  8. if (year%100==0) isLeap = false;
  9. if (year%400==0) isLeap = true;
  10. return isLeap;
  11. }
  12. public static int dayOfYear(int y, int m, int d) {
  13. int c = 0;
  14. for (int i=1; i<m; i++) { // Number of months passed
  15. c = c + daysInGregorianMonth(y,i);
  16. }
  17. c = c + d;
  18. return c;
  19. }
  20. public static int daysInGregorianMonth(int y, int m) {
  21. int d = (int)((m-1)/7);
  22. if (m==2 && isGregorianLeapYear(y)) d++;
  23. return d;
  24. }
  25. public static int dayOfWeek(int y, int m, int d) {
  26. int w = 1; // 01-Jan-0001 is Monday, so base is Sunday
  27. y = (y-1)%400 + 1; // Gregorian calendar cycle is 400 years
  28. int ly = (y-1)/4; // Leap years passed
  29. ly = ly - (y-1)/100; // Adjustment
  30. ly = ly + (y-1)/400; // Adjustment
  31. int ry = y - 1 - ly; // Regular years passed
  32. w = w + ry; // Regular year has one extra week day
  33. w = w + 2*ly; // Leap year has two extra week days
  34. w = w + dayOfYear(y,m,d);
  35. w = (w-1)%7 + 1;
  36. return w;
  37. }

我有这些函数,但我不知道如何使用它们来计算一年中的每一天

liwlm1x9

liwlm1x91#

使用calendar对象,给定年份初始化2日期:第一个id 1.1。'year'第二个是31.12。'year'。使用检查每个日期的日期 Calendar.get(Calendar.DAY_OF_WEEK) .
在一个大小为7的数组中,记录从1.1“年”到第一个星期一(不含)以及从星期一(含)到31.12“年”(含)的天数。在那个数组中找到最高的索引。

相关问题