1. 程式人生 > >藍橋杯算日期VB通解

藍橋杯算日期VB通解

隨便開啟一個目錄, 右鍵-新建文字檔案
重新命名 xxx.vbs (需要顯示字尾名)
vbs是VB Script縮寫... 
因為VB中有2個很簡單的時間函式datediff(時間間隔)和dateadd(時間相加)
所以日期的填空題能1分鐘內做完
=========================我叫分割線=========================
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
DateAdd(interval, number, date)
interval 引數 
yyyy 年 

q 季度 
m 月 
y 一年的日數 
d 日 
w 一週的日數 
ww 周 
h 小時 
n 分鐘 
s 秒 
=========================我叫分割線=========================
2015年4月11日省賽C/C++的B組第2題
星系炸彈


在X星系的廣袤空間中漂浮著許多X星人造“炸彈”,用來作為宇宙中的路標。
每個炸彈都可以設定多少天之後爆炸。
比如:阿爾法炸彈2015年1月1日放置,定時為15天,則它在2015年1月16日爆炸。
有一個貝塔炸彈,2014年11月9日放置,定時為1000天,請你計算它爆炸的準確日期。



請填寫該日期,格式為 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
請嚴格按照格式書寫。不能出現其它文字或符號。
=========================我叫分割線=========================
msgbox dateadd("d",1000,"2014-11-9")
'vb中註釋是單引號...msgbox意思是MessageBox 就是彈出對話方塊
'vb中不需要分號結尾, 函式呼叫 直接可以用 [func 引數]
'更規範 稍微符合C語言的...Call Msgbox("xxxxx")
=========================我叫分割線=========================

就這麼一行, 然後儲存, 執行這個vbs

=========================我叫分割線=========================
答案出來了...這個小技巧分享給大家啦. 不用自己看日曆數(汗||)或者寫程式碼了~
因為3次碰到日期相關的了...所以這個方法還是感覺挺實用的~
能爭取到大概20分鐘的時間(新技能get√)






例二:

題目描述:


    大數學家高斯有個好習慣:無論如何都要記日記。

    他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210

    後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人:日子又過去一天,還有多少時光可以用於浪費呢?

    高斯出生於:1777年4月30日。
    
    在高斯發現的一個重要定理的日記上標註著:5343,因此可算出那天是:1791年12月15日。

    高斯獲得博士學位的那天日記上標著:8113   

    請你算出高斯獲得博士學位的年月日。


提交格式:

yyyy-mm-dd, 例如:1980-03-21


演算法思路:

首先,我們計算出高斯出生的那一天到年末的時間t1,我們用總的天數t減去t1,這樣就可以避免t1對我們以後的計算照成的麻煩;

然後,我們對接下來的每年相加,直到得到第一個天數大於t的年份,則該年份就是我們要求出的年份,按照同樣的方法求出月份;

天數就是t減去以上的時間剩下的結果,還要注意輸出結果中當天數和月份為個位數的時候,不是直接輸出,而是前面帶有0,因此應對輸出進行控制。

注意:一個坑的問題就是自己沒有想到出生的那一天已經是第一天了

'這題因為是第多少天 所以需要-1
'vb中分割字串用& vbCrLf相當於C/C++中的\n或者endl
msgbox "5343:" & dateadd("d",5343-1,"1777-4-30") & vbCrLf & "8113:" & dateadd("d",8113-1,"1777-4-30")