备战蓝桥 Day01 | 世界末日问题
世界末日问题
曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的12月31日,如果是星期一则会。。。
有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!
于是,“谣言制造商”又修改为星期日。。。。。。
1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即XX99年)的12月31日正好是星期天?请回答该年份(只填写这4位整数即可)
解法一:
public class Day01_EndOFWorld {public static void main(String[] args){/*Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:*/Calendar calendar = Calendar.getInstance();//设置当前月份为12月,Calendar的MONTH从0开始计算,所以MONTH=11为12月calendar.set(Calendar.MONTH, 11);//设置当前天数为31日calendar.set(Calendar.DAY_OF_MONTH, 31);//循环体为从1999年开始的世纪迭代for(int year = 1999; year < 10000; year+=100){//设置当前年份为世纪末calendar.set(Calendar.YEAR, year);//若世纪末的年份的12月31日为星期天if(calendar.get(Calendar.DAY_OF_WEEK) == 1) //查表可知星期天的值是1{System.out.println(year);break;}}}
}
//[Out]:2299
解法二:
public class Day01_EndOFWorld2 {public static void main(String[] args) {int year = 1999;//年份为1999int day = 0;//此变量为天数累积量,作为判断是否跳出循环的语句的变量while (year<10000){//因为是从1999年到XX99年,中间有24个闰年,所以day自增36524day+=365*100+24;//如果有世纪闰年,则day++if ((year+1)%400==0)day++;year += 100;//因为1999年12月31日为星期五,所以day%7 == 2表示判断当天是否为周日if (day%7 == 2)break;}System.out.println(year);}
}
//[Out]:2299
知识链接:
Calendar类:
1)Calendar提供了一个类方法, getInstance
,用于获取这种类型的一般有用的对象。 Calendar的getInstance
方法返回一个Calendar对象,其日历字段已使用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
2)成员变量
成员变量 | 描述 |
---|---|
ALL_STYLES | 一个表示 getDisplayNames的样式说明符,表示所有样式的名称,如“1月”和“1月”。 |
AM | AM_PM字段的值表示从午夜到中午之前的一天的时间。 |
AM_PM | 对于get和 set指示是否 HOUR是前或中午之后。 |
APRIL MONTH | 字段的值指示了公历和朱利安日历中的第四个月。 。 |
AUGUST MONTH | 字段的值表示公历和朱利安日历中的第八个月。 |
DATE | get和 set的字段编号,表示该月的日期。 |
DAY_OF_MONTH | get字段编号和 set表示本月的日期。 |
DAY_OF_WEEK | get字段编号和 set表示星期几。 |
DAY_OF_WEEK_IN_MONTH | get和 set字段编号,表示当月的星期几的序数。 |
DAY_OF_YEAR | get字段编号和 set表示 set的日数。 |
DECEMBER | MONTH字段的值表示公历和朱利安日历中的第十二个月。 |
DST_OFFSET | get字段编号和 set表示夏令时偏移量(以毫秒为单位)。 |
ERA | get字段号和 set表示时代,例如,在儒略历中的AD或BC。 |
FEBRUARY | MONTH 字段的值表示今年第二个月在公历和朱利安日历。 |
FIELD_COUNT | 由 get和 set识别的不同字段的数量。 |
FRIDAY DAY_OF_WEEK | 字段的值表示周五。 |
HOUR | get和 set字段编号,表示上午或下午的小时。 |
HOUR_OF_DAY | get和 set字段编号,表示当天的小时数。 |
isSet | 说明是否设置日历的指定日历字段的标志。 |
isTimeSet | 判断 time的值是否有效。 |
JANUARY | MONTH领域的价值指示了公历和朱利安日历中的一年中的第一个月。 |
JULY | MONTH领域的价值指示了公历和朱利安日历中的第七个月。 |
JUNE | MONTH字段的值代表了公历和朱利安日历中的第六个月。 |
LONG | 一个样式说明符 getDisplayName和 getDisplayNames相当于 LONG_FORMAT 。 |
LONG_FORMAT | getDisplayName和 getDisplayNames的样式说明 符 ,表示用于格式的长名称。 |
LONG_STANDALONE | 一个表示 getDisplayName和 getDisplayNames的样式说明 符 ,表示一个长名独立使用,如月份名称作为日历头。 |
MARCH | MONTH字段的价值,表示今年第三个月在公历和朱利安日历。 |
MAY | MONTH字段的价值显示了公历和朱利安日历中的第五个月。 |
MILLISECOND | get字段编号和 set表示秒内的毫秒数。 |
MINUTE | get字段编号和 set表示小时内的分钟。 |
MONDAY | DAY_OF_WEEK字段的值表示星期一。 |
MONTH | get和 set字段号表示该月。 |
NARROW_FORMAT | 一个用于 getDisplayName和 getDisplayNames的样式说明 符 ,表示用于格式的窄名称。 |
NARROW_STANDALONE | |
NOVEMBER | MONTH字段的值代表了公历和朱利安日历中的第十一个月。 |
OCTOBER | MONTH字段的价值表示在公历和朱利安日历中的一年中的第十个月。 |
PM | AM_PM字段的值表示从中午到午夜之前的一天中的一段时间。 |
SATURDAY | DAY_OF_WEEK字段的值表示星期六。 |
SECOND | get字段编号和 set表示分钟内的第二个。 |
SEPTEMBER | MONTH字段的值代表了公历和朱利安日历中的第九个月。 |
SHORT | 一个样式说明符 getDisplayName和 getDisplayNames相当于 SHORT_FORMAT 。 |
SHORT_FORMAT | getDisplayName和 getDisplayNames的样式说明 符 ,表示用于格式的短名称。 |
SHORT_STANDALONE | 一个 getDisplayName和 getDisplayNames的样式说明 符 ,表示一个简单的名称,例如一个月缩写作为日历头。 |
SUNDAY | DAY_OF_WEEK字段的值表示星期天。 |
THURSDAY | DAY_OF_WEEK字段的值表示周四。 |
TUESDAY | DAY_OF_WEEK字段的值表示周二。 |
UNDECIMBER | MONTH字段的值表示一年的第十三个月。 |
WEDNESDAY | 价值 DAY_OF_WEEK字段表示周三。 |
WEEK_OF_MONTH | get字段编号和 set表示 set的周数。 |
WEEK_OF_YEAR | get字段编号和 set表示 set的周数。 |
YEAR | get字段编号和 set表示年份。 |
ZONE_OFFSET | get字段编号和 set表示以毫秒为单位的GMT的原始偏移量。 |
3)构造方法摘要
构造方法 | 描述 |
---|---|
Calendar() | 构造具有默认时区和默认 FORMAT语言环境的日历。 |
Calendar(TimeZone zone, Locale aLocale) | 构造具有指定时区和区域设置的日历。 |
4)方法摘要
方法 | 描述 |
---|---|
add(int field, int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日历字段。 |
after(Object when) | 返回 Calendar是否表示在指定的 Object表示的时间之后的时间。 |
before(Object when) | 返回此 Calendar是否表示由指定的 Object表示的时间之前的时间。 |
clear() | 将所有的日历字段值和时间值(毫秒从偏移 Epoch如此) Calendar不确定。 |
clear(int field) | 设置给定日历字段值和时间值(毫秒从偏移 Epoch如此) Calendar不确定。 |
clone() | 创建并返回此对象的副本。 |
compareTo(Calendar anotherCalendar) | 比较由两个 Calendar对象表示的时间值( Epoch的毫秒偏移量)。 |
complete() | 填写日历字段中的任何未设置的字段。 |
computeFields() | 当前毫秒时间值转换为 time的日历字段值 fields[] 。 |
computeTime() | 将 fields[]中的当前日历字段值 转换为毫秒时间值 time 。 |
equals(Object obj) | 将此 Calendar与指定的 Object 。 |
get(int field) | 返回给定日历字段的值。 |
getActualMaximum(int field) | 给定此 Calendar的时间值,返回指定日历字段可能具有的 Calendar 。 |
getActualMinimum(int field) | 给定此 Calendar的时间值,返回指定日历字段可能具有的 Calendar 。 |
getAvailableCalendarTypes() | 返回一个不可修改的 Set其中包含 Calendar在运行时环境中支持的所有日历类型。 |
getAvailableLocales() | 返回一个所有语言环境的数组,该类的 getInstance方法可以返回本地化实例。 |
getCalendarType() | 返回此 Calendar的日历类型。 |
getDisplayName(int field, int style, Locale locale) | 返回给定的 style和 locale中的日历 field的字符串表示。 |
getDisplayNames(int field, int style, Locale locale) | 返回一个 Map其中包含给定的 style和 locale中的日历 field所有名称及其对应的字段值。 |
getFirstDayOfWeek() | 得到一周的第一天是什么 例如, SUNDAY在美国, MONDAY在法国。 |
getGreatestMinimum(int field) | 返回此 Calendar实例的给定日历字段的最高最小值。 |
getInstance() | 使用默认时区和区域设置获取日历。 |
getInstance(Locale aLocale) | 使用默认时区和指定的区域设置获取日历。 |
getInstance(TimeZone zone) | 使用指定的时区和默认语言环境获取日历。 |
getInstance(TimeZone zone, Locale aLocale) | 获取具有指定时区和区域设置的日历。 |
getLeastMaximum(int field) | 返回此 Calendar实例的给定日历字段的最低最大值。 |
getMaximum(int field) | 返回此 Calendar实例的给定日历字段的 Calendar 。 |
getMinimalDaysInFirstWeek() | 获得一年中第一周所需的最低限度的日子; 例如,如果第一周被定义为包含一年中的第一个月的第一个星期,则此方法返回1。 |
getMinimum(int field) | 返回此 Calendar实例的给定日历字段的 Calendar 。 |
getTimeInMillis() | 以毫秒为单位返回此日历的时间值。 |
getTimeZone() | 获取时区。 |
getWeeksInWeekYear() | 返回此 Calendar代表的星期内的星期 Calendar 。 |
getWeekYear() | 返回此 Calendar代表的 Calendar 。 |
hashCode() | 返回此日历的哈希码。 |
internalGet(int field) | 返回给定日历字段的值。 |
isLenient() | 告诉日期/时间的解释是否宽松。 |
isSet(int field) | 确定给定的日历字段是否具有值集,包括通过 get方法调用触发的内部字段计算设置的值的情况。 |
isWeekDateSupported() | 是否返回 Calendar是否支持星期。 |
roll(int field, boolean up) | 在给定时间字段上添加或减少单个时间单位,而不改变较大的字段。 |
roll(int field, int amount) | 将指定(签名)金额添加到指定的日历字段,而不更改较大的字段。 |
set(int field, int value) | 将给定的日历字段设置为给定的值。 |
set(int year, int month, int date) | 设置日历字段的值 YEAR , MONTH ,并 DAY_OF_MONTH 。 |
set(int year, int month, int date, int hourOfDay, int minute) | 设置日历字段的值 YEAR , MONTH , DAY_OF_MONTH , |
set(int year, int month, int date, int hourOfDay, int minute, int second) | 设置字段中的值 YEAR , MONTH , DAY_OF_MONTH , HOUR_OF_DAY , MINUTE ,并 SECOND 。 |
setFirstDayOfWeek(int value) | 设置一周的第一天是什么? 例如, SUNDAY在美国, MONDAY在法国。 |
setLenient(boolean lenient) | 指定日期/时间解释是否宽松。 |
setMinimalDaysInFirstWeek(int value) | 设定一年中第一个星期所需的最短时间是多少? 例如,如果第一周被定义为包含一年中第一个月的第一天的第一周,请调用此值为1的方法。 |
setTime(Date date) | 使用给定的 Date设置此日历的时间。 |
setTimeInMillis(long millis) | 从给定的长值设置此日历的当前时间。 |
setTimeZone(TimeZone value) | 以给定的时区值设置时区。 |
setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) | 设置这个 Calendar的日期与给定的日期说明符 - 周年,年周和星期几。 |
toInstant() | 将此对象转换为Instant 。 |
toString() | 返回此日历的字符串表示形式。 |
文章原创公众号:吐噜
备战蓝桥 Day01 | 世界末日问题相关推荐
- 蓝桥杯(世界末日题)
题目要求: 曾有邪教称1999年12月31日是世界末日.当然该谣言已经不攻自破. 还有人称今后的某个世纪末的12月31日,如果是星期一则会- 有趣的是,任何一个世纪末的年份的12月31日都不可能是星期 ...
- 蓝桥杯 世纪末的星期(世界末日)
题目要求: 曾有邪教称1999年12月31日是世界末日.当然该谣言已经不攻自破. 还有人称今后的某个世纪末的12月31日,如果是星期一则会.... 有趣的是,任何一个世纪末的年份的12月31日都不可能 ...
- 蓝桥杯2013Java组省赛(世界末日)
//曾有邪教称1999年12月31日是世界末日.当然该谣言已经不攻自破. //还有人称今后的某个世纪末的12月31日,如果是星期一则会- //有趣的是,任何一个世纪末的年份的12月31日都不可能是星期 ...
- 蓝桥杯比赛常考算法_备战蓝桥--算法竞赛入门第一章总结
笔者备战蓝桥杯先打算看完<算法竞赛入门经典>第2版,在这里写下第一章的笔记,供自己和大家参考. 鸡兔同笼问题 原题: 已知鸡和兔的总数量为n,总腿数为m.输入n和m,依次输出鸡的数目和兔的 ...
- NYOJ 636 世界末日
世界末日 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 世界末日马上就要来临了,当然,每个人都想买到船票,但是由于船票有限,因此需要回答对一个问题才能买票.问题是这样的 ...
- 7天备战蓝桥杯之第一天
7天备战蓝桥杯之第一天 0x1 前言 无尔,只为打脸某人.(ps.本来不想玩,谁叫某人喜欢嘲笑我是个垃圾呢,mmp,没错我就是个垃圾,我最tm讨厌说实话的人了) 0x2 备战思路 以我多年的考 ...
- 物理学家张首晟:如果世界末日来临,我会带这几句话上诺亚方舟|研习社演讲实录...
4月9日,著名物理学家.斯坦福大学教授张首晟教授在混沌研习社,分享了<第一性原理与创业>. 张首晟说,千年思想,最最精华的都是大道至简,你看宇宙美妙在哪儿?E=MC²这样一个公式,能够描写 ...
- 备战蓝桥杯—有边数限制的最短路 (bellman_ford+)——[AcWing]有边数限制的最短路
因为近期在学图,所以顺带的写一篇最短路的备战蓝桥杯文章. 最短路(单源) 所有边权都为正数有两种算法: 1.朴素Dijkstra O(n^2) 2.堆优化的Dijkstra O(mlogn ...
- 备战蓝桥杯—枚举——[USACO Nov08]成交
农夫 John 余下了 m 批干草无法处理,他准备要开一个拍卖会去出售他的干草.现在有 n 个顾客,每个顾客的报价是 ai.现在 John 要确定一个单价,所有报价大于等于单价的顾客将会买到 1批干 ...
最新文章
- 一.Timesten安装
- 一文看懂 AI 训练集、验证集、测试集(附:分割方法+交叉验证)
- 基于Http替补新闻WebService数据交换
- 扩展正则表达式egrep11
- SHELL中使用sed替换文本
- [成功] vscode使用微软编译器 vs编译器
- 速度上车,全网无损音乐,付费内容任你免费下载
- Linux中编译mdio命令,linux网络设备—mdio总线
- 一文了解常用效率记笔记软件(超过20款含有图片和双向链笔记)
- 汽车电子设计之SBC芯片简单认识
- Squid安装及运行控制_wuli大世界_新浪博客
- 佳能相机G7 Mark Ⅱ (测光与对焦)
- perl社工密码字典生成器
- OpenXML指定位置插入图片
- 内存取证之Volatility ——合天网安实验室学习笔记
- Photoshop CC 2019 软件安装教程
- 跨考计算机 经验,跨考计算机成功的“重要”经验_跨考网
- 傅里叶逆变换程序matlab,按时间抽取基2-快速傅里叶逆变换算法_MATLAB代码
- VMware安装树莓派(一)
- Oracle_1th_查询语句