前言
牛客网PAT乙级训练1029
题目描述
在国外,每月的 13 号和每周的星期 5 都是不吉利的。特别是当 13 号那天恰好是星期 5时,更不吉利。
现在给你一个年份,请你从小到大依次输出当年所有13 号是星期 5 的月份。
输入描述
输入包含多组数据,每组数据包含一个正整数year(2000≤year≤9999)。
输出描述
对应每一组数据,输出所有符合条件的月份,月份之间用空格隔开。
如果当年不存在13号是星期五的月份,就输出一行Luck。
输入例子
2000
2001
2002
输出例子
10
4 7
9 12
解析
如果使用Java语言就可以很快的解决这道题,只需要使用到Java util包下的Calendar类就可以了。
解决方案
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int year = scanner.nextInt();
int count = 0;
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.DAY_OF_MONTH, 13);
for (int i = 0; i < 12; i++) {
c.set(Calendar.MONTH, i);
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) {
count++;
System.out.print(count == 1 ? "" : " ");
System.out.print(i + 1);
}
}
System.out.println(count == 0 ? "Luck" : "");
}
scanner.close();
}
}
小结
在这里来小结一下Calendar类的用法:
- 获取时间
import java.util.Calendar;
public class Test
{
public static void main(String[] args)
{
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
//比当前月份少1
int month = cal.get(Calendar.MONTH);
//date表示日期,day表示天数,所以date与day_of_month相同
int date = cal.get(Calendar.DATE);
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
//表示本周的第几天,从周日开始计算
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
//12小时制
int hour = cal.get(Calendar.HOUR);
//24小时制
int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int millisecond = cal.get(Calendar.MILLISECOND);
int maxDate = cal.getActualMaximum(Calendar.DATE);
System.out.println("现在的年份为:" + year);
System.out.println("现在的月份为:" + month);
System.out.println("现在的号为:" + date);
System.out.println("现在的号为:" + dayOfMonth);
System.out.println("现在是星期:" + dayOfWeek);
System.out.println("现在过了的天数为:" + dayOfYear);
System.out.println("现在几点:" + hour);
System.out.println("现在几点:" + hourOfDay);
System.out.println("现在几分:" + minute);
System.out.println("现在几秒:" + second);
System.out.println("现在几毫秒:" + millisecond);
System.out.println("本月最后一天是:" + maxDate);
}
}
注意:
- 获得的月份必须加1,例如当前月份是11月,但是执行cal.get(Calendar.MONTH)获得的值却是10
- 获得的星期几是从周日开始算,例如今天是星期日,但是执行cal.get(Calendar.DAY_OF_WEEK)获得的结果却是1
- 设置时间
cal.set(2013, 5, 4, 13, 44, 51);//年月日时分秒(月份0代表1月)
cal.set(Calendar.YEAR, 2014);//年
cal.set(Calendar.MONTH, 7);//月(月份0代表1月)
cal.set(Calendar.DATE, 11);//日
cal.set(Calendar.HOUR_OF_DAY, 15);//时
cal.set(Calendar.MINUTE, 33);//分
cal.set(Calendar.SECOND, 32);//秒
- 运算时间
cal.add(Calendar.YEAR, 1);//年
cal.add(Calendar.MONTH, 1);//月
cal.add(Calendar.DATE, 1);//日
cal.add(Calendar.HOUR_OF_DAY, -1);//时
cal.add(Calendar.MINUTE, 1);//分
cal.add(Calendar.SECOND, 1);//秒
cal.add(Calendar.DATE, 7);//周