1. 程式人生 > >據說2017年10月2日反過來還是這樣誒!——暴力求解法

據說2017年10月2日反過來還是這樣誒!——暴力求解法

mage 天數 amp exc stat 部分 day ext hang

技術分享

最近見到類似的內容,於是閑著無聊花了半個晚上寫了判斷多少年間有多少這樣的天數。

思路是這樣的:

先把當前的日期由年月日分開,然後統計年月日的位數,然後反過來再根據位數創建新的日期,並和原來的比較。最後天數加一不斷循環。

但是,也有一點問題,比如1年1月10日是1110反過來是 0111,分開變成01-1-1,但是創建的時候01會導致錯誤,我就直接寫了try catch專門讓這個判斷出錯,因為10號反過來不可能有相同的。

結果是1年到9999年一共有4286天翻轉相同。

21世紀一共有10天,也正好是國慶這幾天。

最後上代碼,可能寫的有些地方不夠好,浪費了不少時間:

namespace DateSwap
{
    
class MainClass { public static void Main() { DateTime date = new DateTime(1, 1, 1); int count = 0; Dictionary<string, int> dic = new Dictionary<string, int>(); for (;;) { if (date.Year == 9999
&& date.Month == 12 && date.Day == 31) break; int ysize = 0, msize = 0, dsize = 0; string defaultDateString = DateTimeToString(date); //將各部分分開 string[] ns = defaultDateString.Split(a); //得到各個部分的長度 ysize = ns[0
].Length; msize = ns[1].Length; dsize = ns[2].Length; //去掉本來的a,然後翻轉 string removed = defaultDateString.Replace("a", ""); string changed = ReverseToArray(removed); DateTime ReverseDate = ReverseDateTime(changed, ysize, msize, dsize); if (date == ReverseDate) { Write(date.ToString("yyyy-MM-dd") + "\t" + ReverseDate.ToString("yyyy-MM-dd") + "\t"); WriteLine(date == ReverseDate); count++; string s = date.ToString("yyyy"); } date = date.AddDays(1); } WriteLine(count); } private static string DateTimeToString(DateTime date) { return date.Year.ToString() +"a"+ date.Month.ToString() +"a"+ date.Day.ToString(); } public static string ReverseToArray(string date) { char[] c = date.ToCharArray(); Array.Reverse(c); return new string(c); } public static DateTime ReverseDateTime(string dateString, int ysize, int msize, int dsize) { List<char> list = new List<char>(); for (int i = 0; i < ysize; i++) list.Add(dateString[i]); string year = new string(list.ToArray()); list.Clear(); for (int i = ysize; i < msize + ysize; i++) list.Add(dateString[i]); string month = new string(list.ToArray()); list.Clear(); for (int i = ysize + msize; i < msize + ysize + dsize; i++) list.Add(dateString[i]); string day = new string(list.ToArray()); list.Clear(); DateTime newdate; try { newdate = new DateTime(int.Parse(year), int.Parse(month), int.Parse(day)); } catch(Exception) { newdate = new DateTime(9999, 12, 31, 1, 12, 3); } return newdate; } } }

據說2017年10月2日反過來還是這樣誒!——暴力求解法