在X星系的廣袤空間中漂浮着許多X星人造「炸彈」,用來做爲宇宙中的路標。
每一個炸彈均可以設定多少天以後爆炸。
好比:阿爾法炸彈2015年1月1日放置,定時爲15天,則它在2015年1月16日爆炸。
有一個貝塔炸彈,a年b月c日放置,定時爲n天,請你計算它爆炸的準確日期。
輸入
輸入存在多組數據,每組數據輸入一行,每一行輸入四個正整數a,b,c,n
輸入保證日期在1000-01-01到2020-01-01之間,且日期合法。
n不超過1000
輸出
請填寫該日期,格式爲 yyyy-mm-dd 即4位年份2位月份2位日期。好比:2015-02-19
請嚴格按照格式書寫。不能出現其它文字或符號。
樣例輸入 Copy
2015 1 1 15
2014 11 9 1000
樣例輸出 Copy
2015-01-16
2017-08-05
提示
題目已改編。python
python v1.0:ios
python v2.0、C++ v1.0:c++
可以說明的是:代碼長些,速度快些qwq,第一種按每個月每個月的減,當n愈來愈大,兩種算法速度都差很少
算法
python v1.0:函數
def isLeapYear(year):#四年一閏,兩百年不閏,四百年閏 if (not year % 100 == 0) and (year % 4 == 0) or (year % 400 == 0): return True def T(m, y): is31Day = [1,3,5,7,8,10,12] if m in is31Day: return 31 elif m == 2: if isLeapYear(y): return 29 else: return 28 else: return 30 def main(data): y, m, d, n = map(int,data.split(' ')) acc = 0 acc = d + n while True: if T(m, y) == 31: if acc <= 31: d = acc break else: acc = acc - 31 if m == 12: y = y + 1 m = 1 else: m = m + 1 if T(m, y) == 30: if acc <= 30: d = acc break else: m = m + 1 acc = acc - 30 if T(m, y) == 29: if acc <= 29: d = acc break else: m = m + 1 acc = acc - 29 if T(m, y) == 28: if acc <= 28: d = acc break else: m = m + 1 acc = acc - 28 #print(acc) print('{:}-{:0>2}-{:0>2}'.format(y,m,d)) while True: main(input())
python v2.0:spa
def isLeapYear(year):#四年一閏,兩百年不閏,四百年閏 if (not year % 100 == 0) and (year % 4 == 0) or (year % 400 == 0): return True else: return False def main(data): D = [31,28,31,30,31,30,31,31,30,31,30,31] y, m, d, n = map(int,data.split(' ')) if isLeapYear(y): D[1] = 29 for i in range(n): d = d + 1 if d > D[m-1]: d = 1 m = m + 1 if m > 12: m = 1 y = y + 1 if isLeapYear(y): D[1] = 29 else: D[1] = 28 print('{:}-{:0>2}-{:0>2}'.format(y,m,d)) while True: main(input())
c++ v1.0:code
#include<iostream> using namespace std; int f(int x){ if(x%4==0&&x%100!=0||x%400==0) return 1; else return 0; } int d[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int main(){ int a,b,c,n; while(cin>>a>>b>>c>>n){ for(int i=1;i<=n;i++){ if(f(a)) d[1]=29; else d[1]=28; if(++c>d[b-1]) {c=1;b++;} if(b>12){ b=1; ++a; } } printf("%d-%02d-%02d\n",a,b,c); } return 0; } /************************************************************** Problem: 1251 User: yanshanbei Language: C++ Result: 正確 Time:0 ms Memory:2084 kb ****************************************************************/