題目標題: 高斯日記
大數學家高斯有個好習慣:無論如何都要記日記。
他的日記有個與衆不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210
後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒着主人:日子又過去一天,還有多少時光可以用於浪費呢?
高斯出生於:1777年4月30日。
在高斯發現的一個重要定理的日記上標註着:5343,因此可算出那天是:1791年12月15日。
高斯獲得博士學位的那天日記上標着:8113
請你算出高斯獲得博士學位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
大數學家高斯有個好習慣:無論如何都要記日記。
他的日記有個與衆不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210
後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒着主人:日子又過去一天,還有多少時光可以用於浪費呢?
高斯出生於:1777年4月30日。
在高斯發現的一個重要定理的日記上標註着:5343,因此可算出那天是:1791年12月15日。
高斯獲得博士學位的那天日記上標着:8113
請你算出高斯獲得博士學位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
請嚴格按照格式,通過瀏覽器提交答案。
注意:只提交這個日期,不要寫其它附加內容,比如:說明性的文字。
思路:經常出日期題啊,好好練,方鏹找到一個好方法,特別簡單,如下
在桌面建立一個txt文檔,內容爲
DateAdd(interval,number,date)
-
Interval, 必需的參數。它可以採用以下值:
-
d - 一年的天
-
m - 一年中的月份
-
y - 當年
-
yyyy - 年
-
w - 工作周
-
ww - 周
-
q - 季度
-
h - 小
-
m - 分
-
s - 秒
-
-
Number, 必需參數。它可以採取正和負的參數。
-
Date, 必需參數。變體或文字表示增加日期到間隔。
然後保存,改格式爲vbs,然後再打開,就是結果啦!超級方便
dateadd是VBA的一個函數,它返回到指定時間間隔後的日期
注:這個題目將出生的那天算作第一天,因此結果要減一天。爲了避免跳進這種坑,我們先將題目中給出的例子算一遍推斷出生那天是否算爲一天,再計算結果。
自己敲了代碼,因此此題只需要填寫結果,所以代碼漏洞較多
答案 1799-07-16
1.從出生那天開始一直找到標記的那一天(題目中給出的是8113)
2.逆向思維,從標記的那一天開始,不斷減去經歷過的年頭,然後當減去的結果爲0時,就是要輸出的日期
代碼:
#define _CRT_SBCURE_MO_DEPRECATE
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<string>
#include<string.h>
#include<set>
#include<queue>
#include<stack>
#include<functional>
using namespace std;
const int maxn = 100 + 10;
const int INF = 0x3f3f3f3f;
int yy, mm, dd;
int sum;
int day1[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//平年
int main() {
yy = 1777;
mm = 4;
dd = 30;
sum = 8113;
while (sum > 365) {//減去整年數
sum -= 365;
yy++;
if (yy % 4 == 0 && yy % 100 != 0 || yy % 400 == 0) {//閏年
sum--;
}
}
mm++;
for (int i = 4; i < 12; i++) {//當前年剩下的天數
if (sum <= day1[i]) {
printf("1 %d-%d-%d", yy, mm, sum);
system("pause");
return 0;
}
else {
sum -= day1[i];
mm++;
}
}
if (sum > 0) {//新一年
yy++;
mm = 1;
for (int i = 0; i < 4; i++) {
if (sum <= day1[i]) {
printf("2 %d-%d-%d", yy, mm, sum);
system("pause");
return 0;
}
else {
if (i == 1 && yy % 4 == 0 && yy % 100 != 0 || yy % 400 == 0) {//閏年
sum -= day1[i] + 1;
mm++;
}
else {//平年or不是二月
sum -= day1[i];
mm++;
}
}
}
}
printf("3 %d-%d-%d", yy, mm, sum);
system("pause");
return 0;
}