黑马程序员技术交流社区
标题: 一个简单例子引发的血案 [打印本页]
作者: 王德钊 时间: 2013-4-23 20:35
标题: 一个简单例子引发的血案
我们先看一个例子,是某老师的例题,很有意思:
说,八百年有一次,这个月有五个礼拜五,五个礼拜六,五个礼拜日。求验证。
尼玛,八百年?2013年3月份就是,那岂不是没有机会看到下一次了?先不管他,咱们先验证一下。
先看条件:要满足这个要求,(1)这个月必须有31天(2)第一天必须是星期五。
满足这两个条件就可以,那就开始验证吧!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace 复习2
- {
- class Program
- {
- static void Main(string[] args)
- {
- DateTime dt = DateTime.Now;
- while (true)
- {
- DateTime next = dt.AddMonths(1);
- DateTime first = new DateTime(next.Year, next.Month, 1);
- if (DateTime.DaysInMonth(next.Year, next.Month) == 31 && (first.DayOfWeek == DayOfWeek.Friday))
- {
- Console.WriteLine(next);
- break;
- }
- dt = next;
- }
- Console.ReadKey();
- }
- }
- }
- 运行:
- 2014/8/23 11:02:39
复制代码那我们打开日历去看一看,果然,这个月满足条件!!也就是说,哥们我还能看到很多这样的月。这个也不是什么千载难逢的意外事件!就是一个弱智的脑筋急转弯!
例子不是目的,看看我的分析啊:
遇到什么事情不要盲目的相信或者崇拜,咱们分析验证一下是否合理有依据。学会验证的方法和技能,那走遍天下都不怕!!盲目的相信没啥好处,例如有专家说了,四川几十年内 不会有大的地震,尼玛,这次震得也不小啊!有求知欲才会让人进步,嚼别人嚼过的馍
多恶心啊!
如果单纯从这个例子来看,有几个地方值得新手学习。就是一些方法的使用。
DateTime next = dt.AddMonths(1);
DateTime first = new DateTime(next.Year, next.Month, 1);
if (DateTime.DaysInMonth(next.Year, next.Month) == 31 && (first.DayOfWeek == DayOfWeek.Friday))
这几句看着貌似真的有点乱。咱们一点点分析一下啊.
DateTime next = dt.AddMonths(1);//这个是当前时间加一个月。就是说下个月
DateTime first = new DateTime(next.Year, next.Month, 1);//指下个月的第一天
if (DateTime.DaysInMonth(next.Year, next.Month) == 31 && (first.DayOfWeek == DayOfWeek.Friday))//如果下个月有31天而且第一天是星期五。
这不就不复杂了嘛。把自己的语言翻译为机器语言,学会查找方法,都是一个程序员需要掌握的技能。
作者: 吴冕 时间: 2013-4-23 20:42
不错啊!其实把思路理清了,代码上没有难点对吧!第一步分析清题目意思才是重点!
作者: 吴冕 时间: 2013-4-23 20:42
不错了,转了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |