ElemenT马上就要毕业了,他打开日历看了看时间。发现日历上的日期都是2017-04-04这样的格式的,月和日如果不足2位数,前面都会补充0。
给定一个年份和月份,ElemenT把那个月的日期都按上述格式写到纸上,他现在想知道某种数字出现了多少次。
多组输入 每组输入一行,有3个数字y,m,x(1000<=y<=3000,1<=m<=12,0<=x<=9),分别代表年份,月份,和他想知道哪个数字出现的次数。
每组输出一个整数,表示数字x在这个月的日期里出现了多少次。
2017 4 4 2000 1 0
33 136
第一组样例中,日中有数字4的为2017-04-04,2017-04-14,2017-04-24,4月一共有30天,因为月份中有4,所以数字4一共出现了30 + 3 = 33次
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//处理输入
Scanner sc = new Scanner(System.in);
while (true) {
String oneLine = sc.nextLine();
if (oneLine.equals("")) {
return;
}
String[] dateStringArray = oneLine.split(" ");
int year = Integer.parseInt(dateStringArray[0]);
int month = Integer.parseInt(dateStringArray[1]);
char targetChar = (char) ('0' + Integer.parseInt(dateStringArray[2]));
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month, 1);
//比如4月,这里就得到了4月的最后一天。再得到本月的天数
calendar.add(Calendar.DATE, -1);
//得到本月的天数
int dayCount = calendar.get(Calendar.DAY_OF_MONTH);
//统计年份的含量
int resYear = 0;
String yearString = "" + year;
for (int i = 0; i < yearString.length(); i++) {
if (yearString.charAt(i) == targetChar) {
resYear++;
}
}
resYear = resYear * dayCount;
//统计月份的含量
int resMonth = 0;
String monthString = "";
if (month < 10) {
monthString = "0" + month;
} else {
monthString = monthString + month;
}
for (int i = 0; i < monthString.length(); i++) {
if (monthString.charAt(i) == targetChar) {
resMonth++;
}
}
resMonth = resMonth * dayCount;
//统计天数的含量
int resDay = 0;
String dayString = "";
for (int i = 1; i < dayCount; i++) {
//如果当前日期是小于10的,需要在前面拼接一个0
if (i < 10) {
dayString = "0" + i;
} else {
dayString = "" + i;
}
for (int j = 0; j < dayString.length(); j++) {
if (dayString.charAt(j) == targetChar) {
resDay++;
}
}
}
//结果是三者的和
int res = resYear + resMonth + resDay;
System.out.println(res);
}
}
}