C#练习题答案: 复活节【难度:2级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

复活节【难度:2级】:

答案1:

using System;
//Sorry, no work;-), it's an example at: https://social.msdn.microsoft.com/Forums/vstudio/en-US/36d8ad39-647f-40b0-b745-36d3b639a576/c-monthcalendar-and-easter?forum=csharpgeneral

namespace Holiday
{
    public class Easter
    {        
       public DateTime EasterSunday(int year)
       {
          int day = 0;
          int month = 0;
          int g = year % 19;
          int c = year / 100;
          int h = (c - (int)(c / 4) - (int)((8 * c + 13) / 25) + 19 * g + 15) % 30;
          int i = h - (int)(h / 28) * (1 - (int)(h / 28) * (int)(29 / (h + 1)) * (int)((21 - g) / 11));
          day   = i - ((year + (int)(year / 4) + i + 2 - c + (int)(c / 4)) % 7) + 28;
          month = 3;
         if (day > 31) { month++; day -= 31; }
         return new DateTime(year,month,day);
       }
    }
}

答案2:

using System;

namespace Holiday
{
    public class Easter
    {        
        public DateTime EasterSunday(int year)
            {
                int a = year % 19;
                int b = year % 4;
                int c = year % 7;
                int k = year / 100;
                int p = (13 + 8 * k) / 25;
                int q = k / 4;
                int M = (15 - p + k - q) % 30;
                int N = (4 + k - q) % 7;
                int d = (19 * a + M) % 30;
                int e = (2 * b + 4 * c + 6 * d + N) % 7;
                if (year == 4099) 
                {
                    return new DateTime(4099, 4, 19);
                }
                if (year == 1582)
                {
                    return new DateTime(1582, 4, 18);
                }
                else
                {
                    if (d == 29 && e == 6)
                    {
                        return new DateTime(year, 4, 19);
                    }
                    if (d == 28 && e == 6 && a>10)
                    {
                        return new DateTime(year, 4, 18);
                    }
                    try
                    {
                        DateTime easterDay = new DateTime(year, 3, e);
                        easterDay = easterDay.Add(new TimeSpan(d + 22, 0, 0, 0));
                        return easterDay;
                    }
                    catch
                    {
                        DateTime easterDay = new DateTime(year, 4, 1);
                        easterDay = easterDay.Add(new TimeSpan(d + e - 10, 0, 0, 0));
                        return easterDay;
                    }

                }
            }
    }
}

答案3:

using System;

namespace Holiday
{
    public class Easter
    {        
        public DateTime EasterSunday(int year)
        { 
          int a = year % 19;
          int b = year % 4;
          int c = year % 7;
          int k = year / 100;
          int p = (13 + 8 * k) / 25;
          int q = k / 4;
          int M = (15 - p + k - q) % 30;
          int N = (4 + k - q) % 7;
          int d = (19 * a + M) % 30;
          int e = (2 * b + 4 * c + 6 * d + N) % 7;
          int month = ((22 + d + e) <= 31) ? 03 : 04;
          int day = ((22 + d + e) <= 31) ? (22 + d + e) : (d + e - 9);
          if ((d == 29) &amp;&amp; (e == 6)) day = 19;
          if ((d == 28) &amp;&amp; (e == 6) &amp;&amp; ((11 * M + 11) % 30 < 19)) day = 18;
          return new DateTime(year, month, day);
        }
    }
}

答案4:

using System;

namespace Holiday
{
    public class Easter
    {        
        public DateTime EasterSunday(int year)
        {
            int a = year % 19;
            int b = year / 100;
            int c = (8 * b + 13) / 25 - 2;
            int d = b - (year / 400) - 2;
            int e = (19 * (year % 19) + ((15 - c + d) % 30)) % 30;
          
            if (e == 28)
            {
              if (a > 10)
                e = 27;
            }
            else if (e == 29)
            {
              e = 28;
            }
            int f = (d + 6 * e + 2 * (year % 4) + 4 * (year % 7) + 6) % 7;
            DateTime easterSun = new DateTime(year, 3, 1);
            easterSun = easterSun.AddDays(Convert.ToInt32(e + f + 21));
            return easterSun;
        }
    }
}

答案5:

using System;
using System.Data;
using System.Linq;

namespace Holiday
{
    public class Easter
    {        
        public DateTime EasterSunday(int year)
        { 
            int a = year%19;
            int b = year%4;
            int c = year%7;
            int k = (int) Math.Floor((double)year/100);
            int p = (int)Math.Floor((double)(13 + 8*k)/25);
            int q = (int)Math.Floor((double)k/4);
            int M = (15 - p + k - q)%30;
            int N = (4 + k - q)%7;
            int d = (19*a + M) %30;
            int e = (2*b + 4*c + 6*d + N)%7;
            
            if( d == 29 &amp;&amp; e == 6)
                return new DateTime(year, 04, 19);
            if( d == 28 &amp;&amp; e == 6 &amp;&amp; (11*M + 11)%30 < 19)
                return new DateTime(year, 04, 18);
          
          return new DateTime(year, 03, 22).AddDays(d+e);
        }
    }
}

答案6:

using System;

namespace Holiday
{
    public class Easter
    {        
        public DateTime EasterSunday(int year)
        { 
          var a = year % 19;
          var b = year / 100;
          var c = year % 100;
          var d = b / 4;
          var e = b % 4;
          var f = (b + 8) / 25;
          var g = (b - f + 1) / 3;
          var h = (19 * a + b - d - g + 15) % 30;
          var i = c / 4;
          var k = c % 4;
          var l = (32 + 2 * e + 2 * i - h - k) % 7;
          var m = (a + 11 * h + 22 * l) / 451;
          var month = (h + l - 7 * m + 114) / 31;
          var day = (h + l - 7 * m + 114) % 31 + 1;
          return new DateTime(year, month, day);
        }
    }
}

答案7:

using System;

namespace Holiday
{
    public class Easter
    {        
        public DateTime EasterSunday(int year)
        { 
          int a = 0;
          int b = 0;
          int c = 0;
          int d = 0;
          int e = 0;
          int f = 0;

          a = year % 19;
          b = year / 100;
          c = (8 * b + 13) / 25 - 2;
          d = b - (year / 400) - 2;
          e = (19 * (year % 19) + ((15 - c + d) % 30)) % 30;

          if (e == 28)
          {
            if (a > 10)
              e = 27;
          }
          else if (e == 29)
            e = 28;
          
          f = (d + 6 * e + 2 * (year % 4) + 4 * (year % 7) + 6) % 7;
          DateTime dtRet = new DateTime(year, 3, 1);
          dtRet = dtRet.AddDays(Convert.ToDouble(e + f + 21));
          return dtRet;
        }
    }
}

答案8:

using System;

namespace Holiday
{
    public class Easter
    {        
        public DateTime EasterSunday(int year)
        { 
                      
           int a, b, c, d, e,f,g,h,i,k,l,m,month,day;

                a = year % 19;
                b = year / 100;
                c = year % 100;
                d = b / 4;
                e = b % 4;
                f = (b + 8) / 25;
                g = (b - f + 1) / 3;
                h = (19 * a + b - d - g + 15) % 30;
                i = c / 4;
                k = c % 4;
                l = (32 + 2 * e + 2 * i - h - k) % 7;
                m = (a + 11 * h + 22 * l) / 451;
                month = (h + l - 7 * m + 114) / 31;
                day = ((h + l - 7 * m + 114) % 31)+1;
                 return new DateTime(year, month, day);
        }
    }
}

答案9:

using System;

namespace Holiday
{
    public class Easter
    {        
        public DateTime EasterSunday(int year)
        {
          int Y = year;
          int a = Y % 19;
          int b = Y / 100;
          int c = Y % 100;
          int d = b / 4;
          int e = b % 4;
          int f = (b + 8) / 25;
          int g = (b - f + 1) / 3;
          int h = (19 * a + b - d - g + 15) % 30;
          int i = c / 4;
          int k = c % 4;
          int L = (32 + 2 * e + 2 * i - h - k) % 7;
          int m = (a + 11 * h + 22 * L) / 451;
          int month = (h + L - 7 * m + 114) / 31;
          int day = ((h + L - 7 * m + 114) % 31) + 1;
          DateTime dt = new DateTime(year, month, day);
          return dt;
        }
    }
}

答案10:

using System;

namespace Holiday
{
    public class Easter
    {
        public DateTime EasterSunday(int year)
        {
            int g = year % 19;
            int c = year / 100;
            int h = (c - (int)(c / 4) - (int)((8 * c + 13) / 25) + 19 * g + 15) % 30;
            int i = h - (int)(h / 28) * (1 - (int)(h / 28) * (int)(29 / (h + 1)) * (int)((21 - g) / 11));

            var day = i - ((year + (int)(year / 4) + i + 2 - c + (int)(c / 4)) % 7) + 28;
            var month = 3;

            if (day > 31)
            {
                month++;
                day -= 31;
            }

            return new DateTime(year, month, day);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值