首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

出一个C#面试题给大家做,该怎么解决

2012-01-06 
出一个C#面试题给大家做题目要求:(1)产生本月的月历,参考样式:C# codeSU MO TU WE TH FR SA01 02 03 0405

出一个C#面试题给大家做
题目要求:

(1)产生本月的月历,参考样式:

C# code
SU MO TU WE TH FR SA         01 02 03 0405 06 07 08 09 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30


将结果存入一个字符串里面

框架程序:
C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            string calendar = "";            // 在这里编写代码            Console.WriteLine(calendar);        }    }}


时间限制 1 小时。

(2)提高版:编写一个产生当年年历的程序。要求排版成 4 x 3 的样式。

[解决办法]
C# code
            string calendar = "";            // 在这里编写代码            DateTime now = DateTime.Today;            DateTime dt1 = new DateTime(now.Year, now.Month, 1);            DateTime dt2 = dt1.AddMonths(1).AddDays(-1);            StringBuilder sb = new StringBuilder();            for (int i = (int)DayOfWeek.Sunday; i <= (int)DayOfWeek.Saturday; i++)            {                sb.Append(((DayOfWeek)i).ToString().Substring(0, 2).ToUpper() + " ");            }            for (DateTime dt = dt1.AddDays(-(int)now.DayOfWeek); dt <= dt2; dt = dt.AddDays(1))            {                if (dt.Month < now.Month)                    sb.Append("   ");                else                    sb.Append(dt.Day.ToString().PadLeft(2, '0') + " ");                if (dt.DayOfWeek == DayOfWeek.Saturday)                    sb.AppendLine();            }            calendar = sb.ToString();            Console.WriteLine(calendar);
[解决办法]

方法笨点。。

C# code
  string calendar = "";            // 在这里编写代码            DateTime date = DateTime.Now;            DateTime firstDay = new DateTime(date.Year, date.Month, 1);            int daysCount = DateTime.DaysInMonth(date.Year, date.Month);            int weekOfFirstDay = Convert.ToInt32(firstDay.DayOfWeek);            calendar = "\tSU\tMO\tTU\tWE\tTH\tFR\tSA\n";            for (int i = 1; i < daysCount + 1; i++)            {                if (i == 1)                {                    for (int j = 0; j < weekOfFirstDay; j++)                    {                        calendar += "\t";                    }                }                string str = i < 10 ? i.ToString().PadLeft(2, '0') : i.ToString();                calendar += "\t" + str;                if ((i + weekOfFirstDay) % 7 == 0)                {                    calendar += "\n";                }            }            Console.WriteLine(calendar);            Console.ReadLine();
[解决办法]
拿出手机,调出日历,照着画
Console.WriteLine("SU MO TU WE TH FR SA");
Console.WriteLine(" 01 02 03 04");
Console.WriteLine("05 06 07 08 09 10 11");
Console.WriteLine("12 13 14 15 16 17 18");
Console.WriteLine("19 20 21 22 23 24 25");
Console.WriteLine("26 27 28 29 30 ");

临走别忘记淡定的说句,"这公司太弱了,出这么简单的题目,老子来了一次不想来第二次了"
[解决办法]
动动手,写个:

C# code
static void GenerateCalendar(int year, int month){    var num = 7;    var cols = Enumerable.Range(0, num).ToArray();    var row = Enumerable.Range(0, num).Select(x => "__").ToArray();    var begin = new DateTime(year, month, 1);    var end = begin.AddDays(DateTime.DaysInMonth(year, month) - 1);    while (begin.Month == end.Month && begin.Day <= end.Day)    {        row[(int)begin.DayOfWeek] = begin.Day.ToString("00");        if ((int)begin.DayOfWeek == cols[cols.Length-1])        {            Console.WriteLine(string.Join(" ", row));            row = Enumerable.Range(0, num).Select(x => "__").ToArray();        }        begin = begin.AddDays(1);    }    Console.WriteLine(string.Join(" ", row));} 


[解决办法]
标记一下
[解决办法]
都在炫技...这种需求根本不用搞这么复杂,一个循环就够了...
[解决办法]
年历……

C# code
            string calendar = "";            // 在这里编写代码            DateTime now = DateTime.Today;            DateTime dt1 = new DateTime(now.Year, 1, 1);            DateTime dt2 = dt1.AddYears(1).AddDays(-1);            StringBuilder sb = new StringBuilder();            for (int month = 1; month <= 12; month += 4)            {                for (int j = 0; j < 4; j++)                {                    sb.Append(dt1.AddMonths(month + j - 1).ToString("MMM", new System.Globalization.CultureInfo("en-us")) + new string(' ', 18) + "|");                }                sb.AppendLine();                for (int j = 0; j < 4; j++)                {                    for (int i = (int)DayOfWeek.Sunday; i <= (int)DayOfWeek.Saturday; i++)                    {                        sb.Append(((DayOfWeek)i).ToString().Substring(0, 2).ToUpper() + " ");                    }                    sb.Append("|");                }                sb.AppendLine();                DateTime[] dt = new DateTime[4];                for (int i = 0; i < dt.Length; i++)                {                    dt[i] = dt1.AddMonths(month + i - 1);                    dt[i] = dt[i].AddDays(-(int)dt[i].DayOfWeek);                }                while (true)                {                    for (int i = 0; i < 4; i++)                    {                        DateTime end = month + i == 12 ? new DateTime(now.Year + 1, 1, 1).AddDays(-1) : new DateTime(now.Year, month + i + 1, 1).AddDays(-1);                        end = end.AddDays(DayOfWeek.Saturday - end.DayOfWeek);                        for (; dt[i] <= end; dt[i] = dt[i].AddDays(1))                        {                            if (dt[i] < new DateTime(now.Year, month + i, 1) || dt[i] > new DateTime(now.Year, month + i, 1).AddMonths(1).AddDays(-1))                                sb.Append(new string(' ', 3));                            else                                sb.Append(dt[i].Day.ToString().PadLeft(2, '0') + " ");                            if (dt[i].DayOfWeek == DayOfWeek.Saturday)                            {                                dt[i] = dt[i].AddDays(1);                                sb.Append("|");                                break;                            }                        }                    }                    sb.AppendLine();                    int count = 0;                    for (int j = 0; j < dt.Length; j++)                    {                        if (dt[j] >= new DateTime(now.Year, month + j, 1).AddMonths(1).AddDays(-1))                            count++;                        else                            break;                    }                    if (count == 4)                        break;                }                sb.AppendLine(new string('-', 3 * 7 * 4));            }            calendar = sb.ToString();            Console.WriteLine(calendar);
[解决办法]
四楼的不错。
[解决办法]
探讨

都在炫技...这种需求根本不用搞这么复杂,一个循环就够了...

[解决办法]
希望越来越多人能加入进来 show code
[解决办法]
看了楼上 的 都写的差不多了 我就不 献丑了
LZ 的数组方式写的 我怎么看的有点复杂了 
不如循环一个 不更清晰吗


[解决办法]
本来不想写的,看着你们把简单问题复杂化真是蛋疼...这个题根本没有炫技的必要,非常简单的逻辑...

C# code
string MonthCalendar(int year, int month){    var first = new DateTime(year, month, 1);    var last = new DateTime(month == 12 ? year + 1 : year, month == 12 ? 1 : month + 1, 1);    var days = last.Subtract(first).Days;    var prevDays = (int)first.DayOfWeek;    var nextDays = 7 - (int)last.DayOfWeek;    var result = new StringBuilder("SU MO TU WE TH FR SA");    result.AppendLine();    for (int i = -prevDays; i < prevDays + days + nextDays; i++)    {        if (i > -1 && i < days)            result.Append((i + 1).ToString().PadLeft(2, ' '));        else            result.Append("  ");        if ((i + prevDays + 1) % 7 == 0)            result.AppendLine();        else            result.Append(" ");    }    return result.ToString();}string YearCalendar(int year){    var result = new StringBuilder();    for (int i = 1; i < 13; i++)    {        result.AppendLine(MonthCalendar(year, i));    }    return result.ToString();}
[解决办法]
没代码也来捧个场。友情UP

热点排行