关于日期问题的注意事项
1. 月份是从0开始的,最后求的月份记得加1.
2. 星期是从星期天开始计算的,最后求的月份记得减一
3.适当情况 记得判断闰年 闰年2月份29天,一年365天,判断if((year%4==0&&year%100!=0)||(year%400==0))则为闰年
4.有的题目中先给出了例子,则要先计算例子中的结果看是否一样
5.日历中带的日期从1900年到2099年
1----------第一届蓝桥杯----------------
在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天,所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”
要求 输入年份,输出的是:判断该年是否包含黑色星期五,如包含,给出具体日期
import java.util.Calendar;
import java.util.Scanner;
public class HeiWu {
//黑色星期五
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int year=sc.nextInt();
Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
for(int i=0;i<12;i++)
{
calendar.set(Calendar.MONTH,i);
calendar.set(Calendar.DAY_OF_MONTH,13);
int week=calendar.get(Calendar.DAY_OF_WEEK);
if(week-1==5)
{
System.out.println(year+"-"+(i+1)+"-"+13);
}
}
}
}
答案
2018
2018-4-13
2018-7-13
2.-------------------第四届蓝桥杯-----------------
题目标题: 高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
请严格按照格式,通过浏览器提交答案。
注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class GaoSiRiJi {
//高斯日记
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.YEAR,1777);
calendar.set(Calendar.MONTH,3);
calendar.set(Calendar.DAY_OF_MONTH,30);
calendar.add(Calendar.DATE,8112);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date=new Date();
date=calendar.getTime();
String result=sdf.format(date);
System.out.println(result);
}
}
1799-07-16
3. -------------------第六届蓝桥杯---------------
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
请严格按照格式书写。不能出现其它文字或符号。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class XingXiZhaDan {
/*
*
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
请严格按照格式书写。不能出现其它文字或符号。*/
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.YEAR,2014);
calendar.set(Calendar.MONTH,10);
calendar.set(Calendar.DAY_OF_MONTH,9);
calendar.add(Calendar.DATE,1000);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date=new Date();
date=calendar.getTime();
String result=sdf.format(date);
System.out.println(result);
}
}
4. -------------------------------第三届蓝桥杯(决赛)-------------------------
1949年的国庆节(10月1日)是星期六。
今年(2012)的国庆节是星期一。
那么,从建国到现在,有几次国庆节正好是星期日呢?
只要答案,不限手段!
可以用windows日历,windows计算器,Excel公式,。。。。。
当然,也可以编程!
不要求写出具体是哪些年,只要一个数目!
1950
1961
1967
1972
1978
1989
1995
2000
2006
9
import java.util.Calendar;
public class XingQiJi {
/**
1949年的国庆节(10月1日)是星期六。
今年(2012)的国庆节是星期一。
那么,从建国到现在,有几次国庆节正好是星期日呢?
*/
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();
int count=0;
for(int i=1950;i<2012;i++)
{
calendar.set(Calendar.YEAR,i);
calendar.set(Calendar.MONTH,9);
calendar.set(Calendar.DAY_OF_MONTH,1);
int week=calendar.get(Calendar.DAY_OF_WEEK);
if(week==1)
{ count++;
System.out.println(i);
}
}
System.out.println(count);
}
}
5. -------------------------------第三届蓝桥杯(初赛)-------------------------
在我国古代和近代,一直采用干支法纪年。它采用10天干和12地支配合,一个循环周期为60年。
10天干是:甲,乙,丙,丁,戊,己,庚,辛,壬,癸
12地支是:子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥
如果某年是甲子,下一年就是乙丑,再下是丙寅,......癸酉,甲戌,乙亥,丙子,....
总之天干、地址都是循环使用,两两配对。
今年(2012)是壬辰年,1911年辛亥革命
下面的代码根据公历年份输出相应的干支法纪年。已知最近的甲子年是1984年。
void f(int year)
{
char* x[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
char* y[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
int n = year - 1984;
while(n<0) n += 60;
printf("%s%s\n", x[_______], y[_______]);
}
int main(int argc, char* argv[])
{
f(1911);
f(1970);
f(2012);
return 0;
}
1. public class 干支纪年法 {
2.
3. // 甲、乙、丙、丁、戊、己、庚、辛、壬、癸
4. //public static final int[] skyBranch = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
5.
6. // 子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥
7. //public static final char[] earthBranch = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l' };
8.
9. // 甲、乙、丙、丁、戊、己、庚、辛、壬、癸
10. public static final char[] skyBranch = new char[] { '甲','乙','丙','丁','戊','己','庚','辛','壬','癸'};
11.
12. // 子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥
13. public static final char[] earthBranch = new char[] { '子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥' };
14.
15. public static void main(String[] args) {
16.
17. for (int i = 0; i < 2030; i++) {
18. try {
19. caculate(i);
20. if ((i % 20) == 0) {
21. System.out.println("");
22. } else {
23. System.out.println(",");
24. }
25.
26. } catch (RuntimeException e) {
27. System.out.println("Year" + i + " met exception.");
28.
29. }
30. }
31.
32. }
33.
34. private static void caculate(int i) {
35. if (i < 4) {
36. throw new IllegalArgumentException("The starting year must be greater than 4");
37. }
38. int realYear = i - 4;
39. System.out.print("year" + i + " =[" + skyBranch[realYear % 10] + "][" + earthBranch[realYear % 12] + "]");
40.
41. }
42.
43. }
6. -------------------第四届蓝桥杯------------------------------
曾有邪教称1999年12月31日是世纪末日。当然该谣言已经不攻自破。
还有人称今后的某个世纪末的12月31日,如果是星期一则会……
有趣的是,任何一个世纪末的月份的12月31日都不可能是星期一!!
于是,谣言制造商又修改为星期日……
1999年的12月31日是星期五,
请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?
(只写年份,不写月和日)【结果】 2299
package CalendarDemo;
import java.util.Calendar;
public class ShiJiMo {
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();
for(int i=2099;i<3000;i=i+100)
{
calendar.set(Calendar.YEAR,i);
calendar.set(Calendar.MONTH,11);
calendar.set(Calendar.DAY_OF_MONTH,31);
int week=calendar.get(Calendar.DAY_OF_WEEK);
if(week==1)
{
System.out.println(i);
}
}
}
}