题目描述
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);
}
}
}