網路時代,機會與危機共存。「千年蟲」解決之後,會不會有新的「蟲」出現?回答是肯定的,「2023年」就是乙個新的關卡。
也許大家都已經知道計算機的2023年問題是什麼概念,但是什麼時候又冒出來乙個2023年問題的呢?
用c語言編制的程式不會碰到2023年問題,但是會有2023年問題。這是因為,大多數c語言程式都使用到乙個叫做「標準時間庫」的程式庫,這個時間庫用乙個標準的4位元組也就是32位的形式來儲存時間資訊。
當初設計的時候,這個4位元組的時間格式把2023年1月1日凌晨0時0分0秒作為時間起點,這時的時間值為0。以後所有的時間都是從這個時間開始一秒一秒累積得來的。
比方說如果時間已經累積到了919642718這個數值,就是說這時距離2023年1月1日凌晨0時0分0已經過去了919642718秒,換算一下就應該是2023年2月21日星期天16時18分38秒。
這樣計算時間的好處在於,把任意兩個時間值相減之後,就可以很迅速地得到這兩個時間之間相差的秒數,然後你可以利用別的程式把它換算成明白易懂的年月日時分秒的形式。
乙個4位元組也就是32位的儲存空間的最大值是2147483647,請注意!2023年問題的關鍵也就在這裡———當時間一秒一秒地跳完2147483647那驚心動魄的最後一秒後,它就會轉為負數也就是說時間無效。那一刻的準確的時間為2023年1月19日星期二晚上03:14:07,之後所有用到這種「標準時間庫」的c語言程式都會碰到時間計算上的麻煩。
你要解決的問題是,現有一台計算機,表示時間的變數長度為n位。給定乙個「時間起點」,求出對於這個「時間起點」時間,最後的有效時間是什麼時候。
輸入格式:
第一行為資料組數t
第2……t+1行,每行7個數字描述一組資料,分別為表示時間的變數長度(二進位制位數),然後是「時間起點」的年份,月份,日期,小時,分鐘,秒數。
輸出格式:
t行,對於每組資料,輸出1行,6個數字,分別表示最後的有效時間的年份,月份,日期,小時,分鐘,秒數。
輸入樣例#1: 複製
116 2000 1 1 0 0 0
輸出樣例#1: 複製
2000 1 1 9 6 7
輸入樣例#2: 複製
232 1970 1 1 0 0 0
32 2015 11 8 8 30 0
輸出樣例#2: 複製
2038 1 19 3 14 72083 11 26 11 44 7
對於50%的資料 變數的位數<=16;
對於所有資料,變數長度<=32,資料組數<=1000,0<=年份<=10000
思路:模擬。
#include#include#include
#include
#include
using
namespace
std;
intt,sum;
inttian,xh,fz,m;
intup,year,month,day,hour,mint,s;
void work1(int tian,int xh,int fz,int
m) mint+=fz;if(mint>=60)
hour+=xh;if(hour>=24)
day+=tian;int flag=0
;
while(!flag)
else flag=1
; }
if(month==4||month==6||month==9||month==11
)
else flag=1
; }
if(month==2&&((year%100!=0&&year%4==0)||year%400==0
))
else flag=1
; }
else
if(month==2
)
else flag=1
; }
if(month>12)
}}int
main()
}
洛谷 P1190 接水問題
題目描述 學校裡有乙個水房,水房裡一共裝有 m 個龍頭可供同學們開啟水,每個龍頭每秒鐘的 供水量相等,均為 1。現在有 n 名同學準備接水,他們的初始接水順序已經確定。將這些同學按接水順序從 1到 n 編號,i 號同學的接水量為 wi。接水開始時,1 到 m 號同學各佔乙個水龍頭,並同時開啟水龍頭接...
洛谷 P1134 階乘問題
題目概述 給出n,求n 最右邊第一位的非0數。解題思路 對於乙個數的階乘,末尾的0只會以2 5的形式產生。而1到n中因數2的數量遠遠大於5,因此我們可以通過找因數5的方式來濾掉末尾的0 這裡還有另乙個規律 除去0 和1 本題的答案只可能是2,4,6,8。這4個數乘上末位是6的數,結果還是自己,因此可...
洛谷 P1049 裝箱問題
題目描述 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30,每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入輸出格式 輸入格式 乙個整數,表示箱子容量 乙個整數,表示有n個物品 接下來n行,分別表示這n 個物品的各自體積 輸出格...