[VB.NET]算法题: 高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
请严格按照格式,通过浏览器提交答案。
注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。
分析:这实际就是“三天打鱼、两天晒网问题”。
程序实现:(VB.net写的)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
''' <summary> ''' 闰年判断 ''' </summary> ''' <param name="year">输入年份</param> ''' <returns>返回是否为闰年</returns> ''' <remarks></remarks> Private Function IsleapYear(ByVal year As Integer) As Boolean Return (year Mod 400 = 0 Or (year Mod 4 = 0 And year <> 100)) End Function ''' <summary> ''' 获得某年某月的天数 ''' </summary> ''' <param name="year">输入年份</param> ''' <param name="month">输入月份</param> ''' <returns>返回天数</returns> ''' <remarks></remarks> Private Function GetMaxDay(ByVal year As Integer, ByVal month As Integer) As Integer Select Case month Case 1, 3, 5, 7, 8, 10, 12 Return 31 Case 4, 6, 9, 11 Return 30 Case 2 Return IIf(IsleapYear(year), 29, 28) Case Else Return -1 End Select End Function ''' <summary> ''' 获得X天后的日期 ''' </summary> ''' <param name="year">输入年份</param> ''' <param name="month">输入月份</param> ''' <param name="day">输入日期</param> ''' <param name="X">天数</param> ''' <remarks></remarks> Private Sub SetXDays(ByVal year As Integer, ByVal month As Integer, ByVal day As Integer, ByVal X As Integer) Console.WriteLine(CStr(year) + "/" + CStr(month) + "/" + CStr(day) + "在" + CStr(X) + "天后的日期是:") For i As Integer = 1 To X If (day <> GetMaxDay(year, month)) Then day += 1 Else If (month <> 12) Then month += 1 day = 1 Else month = 1 day = 1 year += 1 End If End If Next Console.WriteLine(CStr(year) + "/" + CStr(month) + "/" + CStr(day)) Console.ReadLine() End Sub ''' <summary> ''' 获取日期间隔内有多少天 ''' </summary> ''' <param name="year">较小年份</param> ''' <param name="month">较小月份</param> ''' <param name="day">较小日期</param> ''' <param name="_year">较大年份</param> ''' <param name="_month">较大月份</param> ''' <param name="_day">较大日期</param> ''' <remarks></remarks> Private Sub GetXDays(ByVal year As Integer, ByVal month As Integer, ByVal day As Integer, ByVal _year As Integer, ByVal _month As Integer, ByVal _day As Integer) Dim tmpX As Integer = 0 Console.WriteLine(CStr(year) + "/" + CStr(month) + "/" + CStr(day) + "与" + CStr(_year) + "/" + CStr(_month) + "/" + CStr(_day) + "间隔天数:") Do If (day <> GetMaxDay(year, month)) Then day += 1 Else If (month <> 12) Then month += 1 day = 1 Else month = 1 day = 1 year += 1 End If End If tmpX += 1 Loop Until (year = _year And month = _month And day = _day) Console.WriteLine(tmpX) Console.ReadLine() End Sub Sub Main() SetXDays(2000, 4, 30, 1) GetXDays(2000, 4, 29, 2000, 4, 30) End Sub |
坐等大佬D盘更新,祝大佬全家福寿安康
有公众号之类的吗,之前这个网站打不开了
[…] 关于使用Change…
[…] 关于使用Functi…
谢谢提醒,已删 :)