出一个C#面试题给大家做

threenewbee 2011-06-30 07:06:49
加精
题目要求:

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

SU MO TU WE TH FR SA
01 02 03 04
05 06 07 08 09 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30


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

框架程序:
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 的样式。
...全文
6894 223 打赏 收藏 转发到动态 举报
写回复
用AI写文章
223 条回复
切换为时间正序
请发表友善的回复…
发表回复
candy_zhaopin 2011-11-17
  • 打赏
  • 举报
回复
c#和asp.net什么区别啊?c#分b/s架构和c/s架构吗?哪位高手可以解答下
TANK 2011-11-17
  • 打赏
  • 举报
回复
认真看了下 且运行 菜鸟俺觉得 89楼最好(方法三) 代码少易看易懂,sql编写的那位膜拜了.
收集了三位代码.linq表示看不懂,只是飘过。
代码贴出都能运行成功(-_-别人的)。
#region 方法一

/// <summary>
/// 方法一
/// </summary>
/// <param name="year">年</param>
/// <param name="month">月</param>
/// <returns></returns>
static 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 prevDaysWeek = (int)first.DayOfWeek;
var nextDaysWeek = 7 - (int)last.DayOfWeek;
var result = new StringBuilder("SU MO TU WE TH FR SA");
result.AppendLine();
for (int i = -prevDaysWeek; i < prevDaysWeek + days + nextDaysWeek; i++)
{
if (i > -1 && i < days)
result.Append((i + 1).ToString().PadLeft(2, ' '));
else
result.Append(" ");

if ((i + prevDaysWeek + 1) % 7 == 0)
result.AppendLine();
else
result.Append(" ");
}
return result.ToString();
}

static string YearCalendar(int year)
{
var result = new StringBuilder();
for (int i = 1; i < 13; i++)
{
result.AppendLine(MonthCalendar(year, i));
}
return result.ToString();
}

#endregion

#region 方法二

/// <summary>
/// 方法二
/// </summary>
/// <param name="year">年</param>
/// <param name="month">月</param>
/// <returns></returns>
static string MonthCalendar2(int year, int month)
{
string calendar = "";

DateTime date = new DateTime(year, month, 1);
calendar =
@"SU MO TU WE TH FR SA
{0} {1} {2} {3} {4} {5} {6}
{7} {8} {9} {10} {11} {12} {13}
{14} {15} {16} {17} {18} {19} {20}
{21} {22} {23} {24} {25} {26} {27}
{28} {29} {30} {31} {32} {33} {34}
{35} {36} {37} {38} {39} {40} {41}";
object[] a = new object[42];
for (int i = 0; i < (int)date.DayOfWeek; i++)
{
a[i] = " ";
}

//int kk = (int)date.Now.DayOfWeek;获取当天星期+1;如i++
for (int i = (int)date.DayOfWeek; date.Month == month; i++, date = date.AddDays(1))
{
a[i] = new A(date.Day);
}
calendar = string.Format(calendar, a).TrimEnd();

return calendar.ToString();
}

class A : IFormattable
{
public A(int i)
{
this.i = i;
}
int i;
public string ToString(string format, IFormatProvider formatProvider)
{
return (i).ToString("00");
}
}

#endregion

#region 方法三

/// <summary>
/// 方法三
/// </summary>
/// <param name="year">年</param>
/// <param name="month">月</param>
/// <returns></returns>
static string MonthCalendar3(int year, int month)
{
DateTime date = new DateTime(year, month, 1);
StringBuilder builder = new StringBuilder("SU MO TU WE TH FR SA\n");
for (int i = 0; i < Convert.ToInt32(date.DayOfWeek); i++)
{
builder.AppendFormat(" ");
}
do
{
builder.AppendFormat("{0:D2} ", date.Day);
if (date.DayOfWeek == DayOfWeek.Saturday)
{
builder.Append("\n");
}
date = date.AddDays(1);
}
while (date.Month == DateTime.Today.Month);

return builder.ToString(); ;
}

#endregion
永动bug制造机 2011-11-07
  • 打赏
  • 举报
回复
神一样的存在着。
「已注销」 2011-11-04
  • 打赏
  • 举报
回复

static void Main()
{
string calendar = "";
int year = 2011;
int month = 6;
Calendar a = new Calendar(year, month);
calendar = a.Write();
Console.WriteLine(calendar);
}

class Calendar : IFormattable
{
static readonly string formatStr;
static Calendar()
{
string s = new string('1', 6).Replace("1", "{0} ") + "{0}\n";
formatStr = "SU MO TU WE TH FR SA\n";
formatStr += new string('1', 6).Replace("1", s);
}
public Calendar(int year, int month)
{
this.week = (int)new DateTime(year, month, 1).DayOfWeek * -1;
this.max = DateTime.DaysInMonth(year, month);
}
int week, max;
public string ToString(string format, IFormatProvider formatProvider)
{
return week++ < 0 || week > max ? " " : week.ToString("00");
}
public string Write()
{
return string.Format(formatStr, this).TrimEnd();
}
}


今天看到这个题目五笔蛋疼的又修改了一次
长江 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ojlovecd 的回复:]
C# code

string calendar = "";
// 在这里编写代码
DateTime now = DateTime.Today;
DateTime dt1 = new DateTime(now.Year, now.Month, 1);
DateTime……
[/Quote]

把时间电脑调到2011.10月,你这输出结果就错位了
PaulyJiang 2011-11-04
  • 打赏
  • 举报
回复
用Java写过 改天贴上来
mabaolin 2011-09-30
  • 打赏
  • 举报
回复
这么久了,我也附一个。

public static void Dofun(int year, int month)
{
DateTime dt1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
Console.WriteLine("SU MO TU WE TH FR SA");
string tmpstr = string.Empty;
while ((dt1.Month == month))
{
if (dt1.DayOfWeek.Equals( DayOfWeek.Sunday) )
{
Console.WriteLine(tmpstr.PadLeft(20, ' ') + "\r\n");
tmpstr = "";
}
tmpstr += " " + dt1.Day.ToString();
dt1 = dt1.AddDays(1);
}
}
奋斗小太阳 2011-09-23
  • 打赏
  • 举报
回复
mark
fyj900914 2011-09-21
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NianLi
{
class Program
{
static void Main(string[] args)
{
Console.Write("输入年份:");
int year = int.Parse(Console.ReadLine());

int month;
for (month = 1; month <= 12; month++)
{
Console.WriteLine("{0}月份月历为\n", month);

Console.WriteLine("日 一 二 三 四 五 六");

DayOfWeek week = new DateTime(year, month, 1).DayOfWeek;

for (int i = 0; i < (int)week; i++)
Console.Write("{0,-5}", "");

for (int j = 1; j <= DateTime.DaysInMonth(year, month); j++)
{
Console.Write("{0,-5}", j);
if ((j + (int)week) % 7 == 0)
Console.WriteLine();
}
Console.WriteLine("\n\n");

}

}
}
}
jimtk 2011-09-07
  • 打赏
  • 举报
回复
顶一个 呵呵···
独自等待 2011-07-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 supercpu123 的回复:]
拿出手机,调出日历,照着画
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……
[/Quote]

高手……
阿桐 2011-07-07
  • 打赏
  • 举报
回复
方法还不错,学习了
独孤名 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 supercpu123 的回复:]
拿出手机,调出日历,照着画
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……
[/Quote]


呵呵,哥们儿,想法不错,但不会有那个公司会用你的......
fledgling_taotao 2011-07-07
  • 打赏
  • 举报
回复
各位大哥,能说说这个怎么样就能学好了吗?
blackkettle 2011-07-07
  • 打赏
  • 举报
回复
很好。学习了!
mylzhl 2011-07-07
  • 打赏
  • 举报
回复
呵呵呵,多看看好啊,谢谢。。。
liyf_liyunfeng 2011-07-07
  • 打赏
  • 举报
回复
学习,顶一下。
baobaogu 2011-07-07
  • 打赏
  • 举报
回复
good,very intresgtin
xiaochoudashi 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 97 楼 aniittokyrj 的回复:]
引用 8 楼 supercpu123 的回复:
拿出手机,调出日历,照着画
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……
[/Quote]
用不了两个,就一个。
Zh_java_2009 2011-07-07
  • 打赏
  • 举报
回复
搞JAVA的路过。。。
加载更多回复(160)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧