【蓝桥杯】高斯日记

来源:互联网 发布:2016网络穿越小说 编辑:程序博客网 时间:2024/05/22 09:03
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">大数学家高斯有个好习惯:无论如何都要记日记。</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210</span>
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113 
请你算出高斯获得博士学位的年月日。


提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
请严格按照格式,通过浏览器提交答案。

注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。


参考答案:1799-07-16

看到这个问题,首先是一个填空题。

我们可以使用Date类快速解题,下面为java代码

import java.text.SimpleDateFormat;import java.util.Date;public class Test151227_2 {public static void main(String[] args) {Date d1 = new Date(1777-1900,3,29);//这里需要注意的是year是从1900年开始记,月份是从0记,日则是因为出生当天算一天,所以将当天-1记做出生日期long time = d1.getTime();time += 8113L* 24L*60L*60L*1000L;Date d2 = new Date(time);System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(d2));}}


但如果这是一个程序设计题,则不能这样做,需要自行计算,下面给出java代码


public class Test151227_1 {private static final int NOT_LEAP_YEAR = 1;//非闰年标志位private static final int LEAP_YEAR = 0;//闰年标志位private static final int TARGET_DAYS = 8113;//高斯标记的天数public static void main(String[] args) {int [][] daysOfMonth = {{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};//搞死先生的生日int year = 1777;int month = 3;//0-11int day = 30;//记录搞死先生出生的天数int dayCount = 1;boolean flag = true;for (int mYear = year; ; mYear++) {//外层循环年份if(!flag) break;while(flag){//内层循环月份if(month >= 11){month = -1;break;}dayCount += daysOfMonth[isLeapYear(mYear)][month+1];month ++;if(dayCount >= TARGET_DAYS){System.out.println(mYear + "-" + ((month+1)<10?"0" +(month+1):(month+1))  + "-" +(daysOfMonth[isLeapYear(mYear)][month] - (dayCount  - TARGET_DAYS)));flag = false;break;}}}}private static int isLeapYear(int year){if ((year & 3) != 0) {            return NOT_LEAP_YEAR;        }        return (year%100 != 0) || (year%400 == 0) ? LEAP_YEAR:NOT_LEAP_YEAR ;}}





0 0