码迷,mamicode.com
首页 > 其他好文 > 详细

据说2017年10月2日反过来还是这样诶!——暴力求解法

时间:2017-10-04 14:09:47      阅读:548      评论:0      收藏:0      [点我收藏+]

标签:原来   世纪   1年   oar   color   sed   解法   2017年   private   

技术分享

最近见到类似的内容,于是闲着无聊花了半个晚上写了判断多少年间有多少这样的天数。

思路是这样的:

先把当前的日期由年月日分开,然后统计年月日的位数,然后反过来再根据位数创建新的日期,并和原来的比较。最后天数加一不断循环。

但是,也有一点问题,比如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日反过来还是这样诶!——暴力求解法

标签:原来   世纪   1年   oar   color   sed   解法   2017年   private   

原文地址:http://www.cnblogs.com/himself65/p/7625383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!