蓝桥杯:高斯日记

目录

         题目描述

题目分析:

Java:

答案是:


题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

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

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

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

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

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

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

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

提交答案的格式是:yyyy-mm-ddy, 例如:1980-03-21。

题目分析:

通过给定的天数,1791年12月15日可以得知是高数日期的第5343天,这个数字不方便计算,我们往后推几天,到1792年1月1日,这样高数日期就变成了5343+16天。这样刚好到达一个新的年份。这样8113-(5343+16)之后,就是我们要找到的日期。

我们通过判断1792年是不是闰年的方法,来选择减去366 or 365天的日期,直到日期少于365。每减去一个366 or 365就多加一年,这样当日期少于365的时候,年份就确定下来了。

之后我们输出一下年份,就能看到这个年份是不是闰年。然后从1月开始,每个月减去这个月相对应的天数,直到天数小于30(这个年份不是闰年)。

这样年份,月份,天数都得到了,我们只需要输出查看一下年份、月份、天数,然后拼接输出即可。

Java:

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        //从1792年1月1日开始,往后推了了31-15 = 16天
        int day = 8113-(5343+16);  //从1792年1月1日开始还剩多少天
        //通过循环将年份确定下来,然后确定剩余天数
        int year = 1792;
        while(day>=365){
          //先判断该年是不是闰年,如果是闰年就-366天
          if( (year%4==0 && year%100!=0) || (year%400==0) ){
            day -=366;
          }else{
            day -=365;
          }
          //然后就到下一年了
          year++;
        }
        //这样就算出了年份1799(不是闰年),接下来是月份
        int month = 1;
        while(day>=30){
          switch(month){
            case 2:day-=28;break;
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:day-=31;break;
            default: day-=30;
          }
          //减去这个月的天数之后,就到下一个月
          month++;
        }
        //这样 year,month,day就都算出来了
        //ps:月份少于10的要往前补0,天数也是 
        //System.out.println("year"+year+",month:"+month+",day:"+day);
        //我这里看过结果了,直接拼接输出
        System.out.println("1799-07-16");
    }
}

答案是:

        "1799-07-16"

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值