(藍橋杯第四屆B組)高斯日記

題目標題: 高斯日記


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


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


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


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


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


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


提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21





請嚴格按照格式,通過瀏覽器提交答案。
注意:只提交這個日期,不要寫其它附加內容,比如:說明性的文字。


思路:經常出日期題啊,好好練,方鏹找到一個好方法,特別簡單,如下

在桌面建立一個txt文檔,內容爲

DateAdd(interval,number,date) 
  1. Interval, 必需的參數。它可以採用以下值:

    • d - 一年的天

    • m - 一年中的月份

    • y - 當年

    • yyyy - 年

    • w - 工作周

    • ww - 周

    • q - 季度

    • h - 小

    • m - 分

    • s - 秒

  2. Number, 必需參數。它可以採取正和負的參數。

  3. 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;
}




發佈了167 篇原創文章 · 獲贊 36 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章