static void Main(string[] args)
{
int X = int.Parse(Console.ReadLine().Trim(' '));
int all = 0;
int[] lastBusinessDays = new int[7]; //日、月、火、水、木、金、土
DateTime date = DateTime.Now;
DateTime endDate = date.AddYears(400 * 7);
while(date < endDate)
{
DateTime lastDate = new DateTime(date.Year, date.Month, DateTime.DaysInMonth(date.Year, date.Month));
if(lastDate.DayOfWeek == DayOfWeek.Saturday)
{
lastDate = lastDate.AddDays(-1);
}else if(lastDate.DayOfWeek == DayOfWeek.Sunday)
{
lastDate = lastDate.AddDays(-2);
}
DayOfWeek dow = lastDate.DayOfWeek;
switch (dow)
{
case DayOfWeek.Monday:
lastBusinessDays[1]++;
break;
case DayOfWeek.Tuesday:
lastBusinessDays[2]++;
break;
case DayOfWeek.Wednesday:
lastBusinessDays[3]++;
break;
case DayOfWeek.Thursday:
lastBusinessDays[4]++;
break;
case DayOfWeek.Friday:
lastBusinessDays[5]++;
break;
}
date = date.AddMonths(1);
all++;
}
double result = (int)(((double)lastBusinessDays[X] / all) * 1000000 ) / 1000000.0;
Console.WriteLine(result);
}
メモ
月末最終日は年月の日数をDateTime.DaysInMonth(year,month)メソッドで求め、DateTimeインスタンスをつくる。
int lastDay = DateTime.DaysInMonth(year,mont)
DateTime day = new DateTime(year,month,lastDay)