日期类题目题解

  今天追的综艺更新了,没想到超长待机三个小时,再加上乱七八糟的事情耽误了很多的时间,没有时间更新今日份所有题目的总结了。恰好今天这套题很多都是一个类型的题目那就分开整理吧,今天更新计算日期类的题目,其他的等明天继续更。

  关于计算日期类的题目,可以说都很简单了,而且一般都是小题。就算不会代码差不多电脑自带的日期啊、execl啊都能做,所以我之前都是用的vbs做的,挺方便的。但是听大佬说国赛没有execl什么的正好今天的题有几道关于日期的题目,趁这个机会整理出来。稍后更新一篇常用的方法吧。

第一题:高斯日记

题目: 大数学家高斯有个好习惯:无论如何都要记日记。

    他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210

    后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?

    高斯出生于:1777年4月30日。

    在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。

    高斯获得博士学位的那天日记上标着:8113  

    请你算出高斯获得博士学位的年月日。

这个题其实很简单就是实例化Calendar然后用它的一些方法,先赋值高斯出生日期17770430,再用add方法加日记对应天数。最后用get方法得出对应年月日的值。

需要注意的点:1.month值:一年中的一月的值为 0,记得相应地方的+1 || -1

          2.这个是我自己认为的,不知道对错啊。因为我自己计算一些天数的问题上经常不知道当前天应该算1还是0,所以带了题中给的例子5343天->17971215,所以记得add方法里的天数要-1

代码如下:

 1 import java.util.Calendar;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         Calendar cal=Calendar.getInstance();
 7         cal.set(Calendar.YEAR, 1777);
 8         cal.set(Calendar.MONTH,3);
 9         cal.set(Calendar.DATE,30);
10 //        cal.add(Calendar.DATE,5343-1);
11         cal.add(Calendar.DATE,8113-1);
12         System.out.println(cal.get(Calendar.YEAR));
13         System.out.println(cal.get(Calendar.MONTH)+1);
14         System.out.println(cal.get(Calendar.DATE));
15     }
16 
17 }

第二题:判断闰年问题

闰年问题:四年一闰,百年不闰;四百年又闰

代码如下:也是很简单,不多说

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6 
 7 //        闰年问题:四年一闰,百年不闰;四百年又闰
 8         Scanner sc=new Scanner(System.in);
 9         int y=sc.nextInt();
10         if((y % 4==0 && y % 100!=0)||(y % 400==0)){
11             System.out.println("yes");
12         }else{
13             System.out.println("no");
14         }
15     }
16 
17 }

第三题:世纪末的星期

曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。

还有人称今后的某个世纪末的12月31日,如果是星期一则会....

有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 

于是,“谣言制造商”又修改为星期日......

1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?

请回答该年份(只写这个4位整数,不要写12月31等多余信息)

题解:这个我一开始用电脑自带的就不行了,因为没有那么多的日期。所以改用代码完成。
1.第一种,因为说了xx99年,所以for循环,20 21 22 23.......判断20991231 21991231 22991231 23991231.....对应是周日输入。自己选择最近的一个世纪末日期
代码如下:
ps:该注意的问题还是月份从0开始,星期->周日对应值是1
 1 import java.util.Calendar;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7 //        方法一:
 8         for(int i=20;i<40;i++){
 9             int y=i*100+99;
10             int m=12-1;//cal里month从0开始
11             int d=31;
12             Calendar cal=Calendar.getInstance();
13             cal.set(Calendar.YEAR,y);
14             cal.set(Calendar.MONTH, m);
15             cal.set(Calendar.DATE, d);
16             if(cal.get(Calendar.DAY_OF_WEEK)==1)//周日对应的值是1
17             System.out.println(y);
18         }
19     }
20 
21 }

  2.知道19991231是周五了,然后一年一年的加。闰年366普通365加上每年对应的天数,然后在每个世纪末年判断是否为周天。具体的代码里都有注释听清楚的了。

代码如下:

import java.util.Calendar;

public class Main{

    public static void main(String[] args) {
        // TODO Auto-generated method stub
//        方法二:
        int year=1999,daysum=0;
        while(year<2500){
            year++;
            daysum+=365;
            //如果闰年多一天->366
            if(year%400==0||(year%4==0&&year%100!=0)) daysum++;
            //第一个是在说xx99年,第二个条件判断周天(1999,周五->求xx99是周天)
            if((year %100==99)&&(daysum%7==2)){
                System.out.println(year);
            }
        }
    }

}

  好了,好了。更完了今天的部分。明天起床了在整理其他的题目啊~~~


原文地址:https://www.cnblogs.com/ShallByeBye/p/8411086.html