文章目录
- 题目描述
- 解题思路
- 代码如下
题目描述
NowCoder在淘宝上开了一家网店。他发现在月份为素数的时候,当月每天能赚1元;否则每天能赚2元。
现在给你一段时间区间,请你帮他计算总收益有多少。
eg:
输入:
2000 1 1 2000 1 31
2000 2 1 2000 2 29
输出:
62
29
以下是本篇文章正文内容,下面案例可供参考
解题思路
1993~2013
1993剩余的收益 + [1994,2012] 全年的收益 + 2013年有的收益
1993~1993
只有1993年的收益
profit = profitOfYear(year1) - profitOfThisYear(year1, month1, day1 - 1);
1993-5-7 = 1993的全年收益 - 从1993年1月1日到1993年5月6日的收益(day1 - 1)
代码如下
// write your code here
import java.util.*;
public class Main {private static boolean isLeapYear(int year) {return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);}private static int profitOfYear(int year) {return 2 * 31 + 1 * 28 + 1 * 31 + 2 * 30 + 1 * 31 + 2 * 30 + 1 * 31 + 2 * 31 + 2 * 30 + 2 * 31 + 1 * 30 + 2 * 31 +(isLeapYear(year) ? 1:0);}private static boolean isPrime(int month) {return month == 2 || month == 3 || month == 5 || month == 7 || month == 11;}private static int profitOfThisYear(int year,int month,int day){int profit = 0;if(!isPrime(month)) {profit = day * 2;}else{profit = day;}while(--month>0) {switch(month) {case 1:case 8:case 10:case 12: profit += 62;break;case 3:case 5:case 7: profit += 31;break;case 4:case 6:case 9: profit += 60;break;case 11: profit += 30;break;default:profit += (28+(isLeapYear(year)?1:0));break;}}return profit;}public static void main(String[] args) {int year1,month1,day1,year2,month2,day2;int profit = 0;Scanner sc = new Scanner(System.in);while(sc.hasNext()) {year1 = sc.nextInt();month1 = sc.nextInt();day1 = sc.nextInt();year2 = sc.nextInt();month2 = sc.nextInt();day2 = sc.nextInt();profit = profitOfYear(year1) - profitOfThisYear(year1,month1,day1-1);profit += profitOfThisYear(year2,month2,day2);if(year1 == year2) {profit -= profitOfYear(year1);}for(int i = year1+1;i<year2;i++) {profit += profitOfYear(i);}System.out.println(profit);}}
}