1. 程式人生 > >藍橋杯 歷屆試題 日期問題

藍橋杯 歷屆試題 日期問題

歷屆試題 日期問題
時間限制:1.0s 記憶體限制:256.0MB

問題描述
  小明正在整理一批歷史文獻。這些歷史文獻中出現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期採用的格式非常不統一,有采用年/月/日的,有采用月/日/年的,還有采用日/月/年的。更加麻煩的是,年份也都省略了前兩位,使得文獻上的一個日期,存在很多可能的日期與其對應。

  比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。

  給出一個文獻上的日期,你能幫助小明判斷有哪些可能的日期對其對應嗎?
輸入格式
  一個日期,格式是”AA/BB/CC”。 (0 <= A, B, C <= 9)
輸出格式
  輸出若干個不相同的日期,每個日期一行,格式是”yyyy-MM-dd”。多個日期按從早到晚排列。
樣例輸入
02/03/04
樣例輸出
2002-03-04
2004-02-03
2004-03-02
資料規模和約定
  峰值記憶體消耗(含虛擬機器) < 256M
  CPU消耗 < 1000ms

注意:這個題其實也就是考察扣邊界的coding能力,有基礎就可以做。不過測試資料給的比較偏。你需要考慮的幾種情況。

  1. 常規 02/03/04
  2. 結果排列後重復的 01/01/01 要去重
  3. 包含00的 例如00/01/02直接日期化,不存在00天或者00月報錯。00根據題意只可能是2000年的狀態
  4. 日期邊界 剔除排列出後超過規定年限的
  5. 也是最坑的一點,這道題TM題目是錯的!!!
    題目中寫的是日期排列有 年/月/日 日/月/年 月/日/年
    但是根據系統的樣例我推出的答案是 年/月/日 日/月/年 日/年/月
    也就是你依照題目要求寫的程式碼會在測試點3、6掛掉。

需要樣例資料的小夥伴可以加關注私信我


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;



public class
Main { public static void main(String[] args) throws IOException { BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); String data[]=bf.readLine().split("\\/"); java.text.SimpleDateFormat format = new java.text.SimpleDateFormat( "yyyy-MM-dd"
);//用於格式化時間 ArrayList<Date> list=new ArrayList<Date>(); //如果有00,那麼00根據範圍和常理沒有00月和00日所以必為2000 if (data[0].equals("00")||data[1].equals("00")||data[2].equals("00")) { Date d9; Date d10; if (data[0].equals("00")) { d9=new Date("2000"+"/"+data[1]+"/"+data[2]); d10=new Date("2000"+"/"+data[2]+"/"+data[1]); }else if(data[1].equals("00")){ d9=new Date("2000"+"/"+data[0]+"/"+data[2]); d10=new Date("2000"+"/"+data[2]+"/"+data[0]); }else { d9=new Date("2000"+"/"+data[0]+"/"+data[1]); d10=new Date("2000"+"/"+data[1]+"/"+data[0]); } list.add(d9); list.add(d10); }else { //年月日 Date d1=new Date("19"+data[0]+"/"+data[1]+"/"+data[2]); Date d2=new Date("20"+data[0]+"/"+data[1]+"/"+data[2]); //日月年 Date d3=new Date("19"+data[2]+"/"+data[1]+"/"+data[0]); Date d4=new Date("20"+data[2]+"/"+data[1]+"/"+data[0]); //日年月 Date d5=new Date("19"+data[2]+"/"+data[0]+"/"+data[1]); Date d6=new Date("20"+data[2]+"/"+data[0]+"/"+data[1]); list.add(d1); list.add(d2); list.add(d3); list.add(d4); list.add(d5); list.add(d6); } Date start=new Date("1960/01/01"); Date end=new Date("2059/12/31"); //去重 ArrayList<Date> list2=new ArrayList<Date>(); for (int i = 0; i < list.size(); i++) { if (!list2.contains(list.get(i))) { list2.add(list.get(i)); } } //排序後將符合時間段的日期輸出 Collections.sort(list2); for (int i = 0; i < list2.size(); i++) { if (list2.get(i).compareTo(start)==1&&list2.get(i).compareTo(end)==-1) { String temp=format.format(list2.get(i)); if (temp.contains(data[0])&&temp.contains(data[1])&&temp.contains(data[2])) { System.out.println(format.format(list2.get(i))); } } } } }

相關推薦

藍橋 歷屆試題 日期問題

歷屆試題 日期問題 時間限制:1.0s 記憶體限制:256.0MB 問題描述   小明正在整理一批歷史文獻。這些歷史文獻中出現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期採用的格式非常不統一,有采

藍橋 歷屆試題 包子湊數

公約數 整數 發現 %d 歷屆試題 stream string def 其中 問題描述   小明幾乎每天早晨都會在一家包子鋪吃早餐。他發現這家包子鋪有N種蒸籠,其中第i種蒸籠恰好能放Ai個包子。每種蒸籠都有非常多籠,可以認為是無限籠。  每當有顧客想買X個包子,賣包子的大叔

藍橋 - 歷屆試題(第五屆) - 蘭頓螞蟻(模擬)

http://lx.lanqiao.cn/problem.page?gpid=T125 時間限制:1.0s   記憶體限制:256.0MB 問題描述   蘭頓螞蟻,是於1986年,由克里斯·蘭頓提出來的,屬於細胞自動機的一種。   平面上的正方形格子被填上黑色或白色。在其

[藍橋][歷屆試題]螞蟻感冒

http://www.dotcpp.com/oj/problem1454.html 題目描述 長100釐米的細長直杆子上有n只螞蟻。它們的頭有的朝左,有的朝右。 每隻螞蟻都只能沿著杆子向前爬,速度是1釐米/秒。 當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。 這些螞蟻中,有1只螞蟻感

藍橋 歷屆試題 螞蟻感冒

資源 har get fin 螞蟻 lis 一行 space std Description 長100厘米的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。 每只螞蟻都只能沿著桿子向前爬,速度是1厘米/秒。 當兩只螞蟻碰面時,它們會同時掉頭往相反的方向爬行。

藍橋 歷屆試題 九宮重排 (bfs+康託展開去重優化)

Description 如下面第一個圖的九宮格中,放著 1~8 的數字卡片,還有一個格子空著。與空格子相鄰的格子中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。 我們把第一個圖的局面記為:12345678. 把第二個圖的局面記為:123.46758 顯然是按從

藍橋 歷屆試題 網路尋路(dfs搜尋合法路徑計數)

X 國的一個網路使用若干條線路連線若干個節點。節點間的通訊是雙向的。某重要資料包,為了安全起見,必須恰好被轉發兩次到達目的地。該包可能在任意一個節點產生,我們需要知道該網路中一共有多少種不同的轉發路徑。 源地址和目標地址可以相同,但中間節點必須不同。 如下圖所示的網路。 1 -> 2 ->

藍橋 歷屆試題 幸運數(暴力打表)

第一個 pac for ans include inpu putchar desc 幸運數 Description 幸運數是波蘭數學家烏拉姆命名的。它采用與生成素數類似的“篩法”生成 。 首先從1開始寫出自然數1,2,3,4,5,6,...

藍橋歷屆試題——取球遊戲(博弈論)

取球遊戲 今盒子裡有n個小球,A、B兩人輪流從盒中取球,每個人都可以看到另一個人取了多少個,也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。     我們約定:       每個人從

[藍橋][歷屆試題]九宮重排

如下面第一個圖的九宮格中,放著 1~8 的數字卡片,還有一個格子空著。與空格子相鄰的格子中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。 我們把第一個圖的局面記為:12345678. 把第二個圖的局面記為:123.46758 顯然是按從上到下,從左到右的順序記

藍橋 歷屆試題 小計算器

時間限制:1.0s   記憶體限制:256.0MB 問題描述   模擬程式型計算器,依次輸入指令,可能包含的指令有   1. 數字:'NUM X',X為一個只包含大寫字母和數字的字串,表示一個當前進位制的數   2. 運算指令:'ADD','SUB','MUL',

藍橋歷屆試題 錯誤票據

藍橋杯歷屆試題 錯誤票據 題目 解題思路 題目 問題描述 某涉密單位下發了某種票據,並要在年終全部收回。 每張票據有唯一的ID號。全年所有票據的ID號是連續的,但ID的開始數碼是隨機選定的。 因為工作人員疏忽,在

藍橋 歷屆試題 九宮重排 (八數碼問題--康託展開去重 + bfs搜尋)

題意: 簡單的八數碼問題: 給你兩個狀態 求最少步數。 可以把點變成9: 這樣,9個數都不一樣,相當於是階乘的排列。 直接用bfs 搜尋 康託展開去重即可。 #include <cstdio> #include <cstring> #include

藍橋-歷屆試題-PREV-13-網路尋路

ACM模版 描述 題解 很簡單的一道題,但是前天上 java 課老師讓我們練題,給大家出了一道這題,一看資料就知道這個一定是 dfs+鄰接表,然而我沒有跟著專業學 java,倒是主攻的 C/C++,所以寫 C/C++ 版也就分分鐘的事,可是

藍橋 歷屆試題 PREV-55 小計算器

歷屆試題 小計算器 時間限制:1.0s 記憶體限制:256.0MB 問題描述   模擬程式型計算器,依次輸入指令,可能包含的指令有   1. 數字:‘NUM X’,X為一個只包含大寫字母和數字的字串,表示一個當前進位制的數   2. 運算指令:‘ADD’,‘SUB’,‘MUL’,‘D

藍橋 歷屆試題 分糖果

問題描述   有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲:   每個小朋友都把自己的糖果分一半給左手邊的孩子。   一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。   反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。   你的任務是預測在已知的初始

藍橋-歷屆試題-帶分數

歷屆試題 帶分數   問題描述 100 可以表示為帶分數的形式:100 = 3 + 69258 / 714。 還可以表示為:100 = 82 + 3546 / 197。 注意特徵:帶分數中,數字1~9分別出現且只出現一次(不包含

藍橋-歷屆試題-列印十字圖

歷屆試題 列印十字圖 問題描述 小明為某機構設計了一個十字型的徽標(並非紅十字會啊),如下所示: ..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $.

問題 1443: [藍橋][歷屆試題]數字遊戲

題目描述 棟棟正在和同學們玩一個數字遊戲。 遊戲的規則是這樣的:棟棟和同學們一共n個人圍坐在一圈。棟棟首先說出數字1。接下來,坐在棟棟左手邊的同學要說下一個數字2。再下面的一個同學要從上一個同學說的數字往下數兩個數說出來,也就是說4。下一個同學要往下數三個

藍橋歷屆試題 危險係數(dfs或者並查集求無向圖關於兩點的割點個數)

Description 抗日戰爭時期,冀中平原的地道戰曾發揮重要作用。 地道的多個站點間有通道連線,形成了龐大的網路。但也有隱患,當敵人發現了某個站點後,其它站點間可能因此會失去聯絡。 我們來定義一個危險係數DF(x,y): 對於兩個站點x和y (x != y), 如果能找到一個站點z,當