人狼羊菜2018年对象版本

新建Transport类,因方法和属性都有对应的详细说明,故不再赘述。

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/// <summary>
/// 运输类
/// </summary>
public class Transport
{
/// <summary>
/// 运输对象名称
/// </summary>
public string ObjectName { get; set; }

/// <summary>
/// 运输方向描述
/// </summary>
public string DirectionDescription { get; set; }

/// <summary>
/// 校验初始状态的函数
/// </summary>
Func<int, bool> ValidInitStateFuc { get; set; }

/// <summary>
/// 校验结束状态的函数
/// </summary>
Func<int, bool> ValidEndStateFuc { get; set; }

/// <summary>
/// 单次运输函数
/// </summary>
Func<int, int> MoveFunc { get; set; }

public Transport(string objectName, Func<int, bool> validInitState, Func<int, bool> validEndState,
Func<int, int> moveFunc)
{
this.ObjectName = objectName;
this.ValidInitStateFuc = validInitState;
this.ValidEndStateFuc = validEndState;
this.MoveFunc = moveFunc;
}

/// <summary>
/// 运输方法
/// </summary>
/// <param name="state">初始状态</param>
/// <returns>运输之后的状态</returns>
public int Transfer(int state)
{
if (ValidInitStateFuc(state))
{
int result = MoveFunc(state);
if (ValidEndStateFuc(result))
{
DirectionDescription = result > 8 ? "从A岸到了B岸。" : "从B岸到了A岸。";
Console.WriteLine(ObjectName + DirectionDescription);
return result;
}
}

return state;
}
}

调用方法如下

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
42
43
44
45
static void Main(string[] args)
{
Console.WriteLine("transports 开始");

//判断是否合法状态
bool ValidEndState(int state) => state != 3 && !(state >= 6 && state <= 9) && state != 12;

//判断人是否和羊在一起
bool IsPeopleWithSheep(int state) => state / 2 % 2 == 0 && state < 8 || state / 2 % 2 == 1 && state >= 8;

//判断人是否和狼在一起
bool IsPeopleWithWolf(int state) => !(state >= 4 && state <= 11);

//判断人是否和菜在一起
bool IsPeopleWithGreens(int state) => state % 2 == 0 && state < 8 || state % 2 == 1 && state >= 8;

//运输人和青菜
int TransferPeopleWithGreens(int i) => i ^ 9;

//运输人和羊
int TransferPeopleWithSheep(int i) => i ^ 10;

//运输人和狼
int TransPeopleWithWolf(int i) => i ^ 12;

//运输人和狼
int TransPeople(int i) => i ^ 8;
Transport transport1 = new Transport("人和菜", IsPeopleWithGreens, ValidEndState, TransferPeopleWithGreens);
Transport transport2 = new Transport("人和羊", IsPeopleWithSheep, ValidEndState, TransferPeopleWithSheep);
Transport transport3 = new Transport("人和狼", IsPeopleWithWolf, ValidEndState, TransPeopleWithWolf);
Transport transport4 = new Transport("人", state => true, ValidEndState, TransPeople);
List<Transport> transports = new List<Transport> {transport1, transport2, transport3, transport4};
int tempState = 0;
int EndState = 15;
while (tempState != EndState)
{
foreach (var actionItem in transports)
{
tempState = actionItem.Transfer(tempState);
}
}

Console.WriteLine("transports 结束");
Console.ReadKey();
}

运行结果如下

1
2
3
4
5
6
7
8
9
transports 开始
人和羊从A岸到了B岸。
人从B岸到了A岸。
人和菜从A岸到了B岸。
人和羊从B岸到了A岸。
人和狼从A岸到了B岸。
人从B岸到了A岸。
人和羊从A岸到了B岸。
transports 结束

参考资料

人狼羊菜2018年过程版本

分析

假设开始人狼羊菜都是在A岸,目的是将人狼羊菜运输到B岸。
人,狼,羊,菜在A岸的标识为0,在B岸的标识位为1。经过枚举可以得出16种状态中不符合的有6种。
如图所示

人狼羊菜状态图

根据以上描述的状态模式,可以将问题转化为

  • 判断运输的终止状态是否合法
  • 判断人和羊是否在一侧
  • 判断人和菜是否在一侧
  • 判断人和狼是否在一侧
  • 执行人独自过河的动作
  • 执行人和羊一起过河的动作
  • 执行人和狼一起过河的动作
  • 执行人和菜一起过河的动作

新建MoveClass类

1
2
3
4
5
6
7
/// <summary>
/// 人狼羊菜运输类
/// </summary>
public class MoveClass
{

}

依次对应的函数如下

1
2
3
4
5
6
7
8
9
/// <summary>
/// 状态合法
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
public bool IsVaild(int state)
{
return state != 3 && !(state >= 6 && state <= 9) && state != 12;
}
1
2
3
4
5
6
7
8
9
/// <summary>
/// 人和羊在一起返回真
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
public bool IsPeopleWithSheep(int state)
{
return ((state / 2) % 2 == 0 && state < 8) || ((state / 2) % 2 == 1 && state >= 8);
}
1
2
3
4
5
6
7
8
9
/// <summary>
/// 人和菜在一起返回真
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
public bool IsPeopleWithGreens(int state)
{
return state % 2 == 0 && state < 8 || state % 2 == 1 && state >= 8;
}
1
2
3
4
5
6
7
8
9
/// <summary>
/// 人和狼在一起返回真
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
public bool IsPeopleWithWolf(int state)
{
return !(state >= 4 && state <= 11);
}
1
2
3
4
5
6
7
8
9
/// <summary>
/// 只身一人过河
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
public int MovePerson(int state)
{
return state ^ 8;
}
1
2
3
4
5
6
7
8
9
/// <summary>
/// 人带羊过河
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
public int MovePersonWithSheep(int state)
{
return state ^ 10;
}
1
2
3
4
5
6
7
8
9
/// <summary>
/// 人带狼过河
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
public int MovePersonWithWolf(int state)
{
return state ^ 12;
}
1
2
3
4
5
6
7
8
9
/// <summary>
/// 人带菜过河
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
public int MovePersonWithGreens(int state)
{
return state ^ 9;
}

主要的逻辑函数

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
42
43
44
public void Move()
{
int state = 0, tempState;
int EndState = 15;
while (state != EndState)
{
tempState = MovePerson(state);
if (IsVaild(tempState))
{
state = tempState;
Console.WriteLine(state > 8 ? "人独自一人从A岸到达B岸" : "人独自一人从B岸到达A岸");
}

if (IsPeopleWithSheep(state))
{
tempState = MovePersonWithSheep(state);
if (IsVaild(tempState))
{
state = tempState;
Console.WriteLine(state > 8 ? "人带羊从A岸到达B岸" : "人带羊从B岸到达A岸");
}
}

if (IsPeopleWithWolf(state))
{
tempState = MovePersonWithWolf(state);
if (IsVaild(tempState))
{
state = tempState;
Console.WriteLine(state > 8 ? "人带狼从A岸到达B岸" : "人带狼从B岸到达A岸");
}
}

if (IsPeopleWithGreens(state))
{
tempState = MovePersonWithGreens(state);
if (IsVaild(tempState))
{
state = tempState;
Console.WriteLine(state > 8 ? "人带菜从A岸到达B岸" : "人带菜从B岸到达A岸");
}
}
}
}

执行以上逻辑函数

1
2
3
4
Console.WriteLine("MoveClass 开始");
new MoveClass().Move();
Console.WriteLine("MoveClass 结束");
Console.ReadKey();

最终运行结果如下:

1
2
3
4
5
6
7
8
9
MoveClass 开始
人带羊从A岸到达B
人独自一人从B岸到达A
人带狼从A岸到达B
人带羊从B岸到达A
人带菜从A岸到达B
人独自一人从B岸到达A
人带羊从A岸到达B
MoveClass 结束

参考资料

建站原因

前几天翻阅过去的日志,里面有一句话——如果没有去长城的想法,那就摸不到长城的砖块。
换而言之,如果我不想搭建一个网站,那该网站就不会诞生。搭建网站总是有一个目标的,那我搭建该网站的目标是啥?

分享传播

最初的原因是我有时间,我有工作经验,然后我钦佩一些圈子内的技术大牛,认同他们的开源理念,想追随他们的脚步,故有了最初的目标:

  • 搭建一个网站用于知识的分享和传播。

记录知识

在搭建网站的过程中遇到的问题也越来越多,比如后台是Dbfirst还是code first?网站需不需要走Https?网站要不要引入Abp框架?富文本的编辑工具选择什么?怎么样做QQ登录?微信授权登录该怎么实现?在一步一步的功能实现过程中遇到了很多在工作中没有遇到过的问题,也在解决这些问题的过程中接触到了很多的之前未曾涉及到的知识点,所以搭建网站的过程中又新增了一个目标:

  • 记录我在搭建网站过程中走过的坑,希望同行有幸看到该文章,不再走相似的重复道路。

归纳整理

在做技术选型的时候,为了实现跨平台我选择了.net core。

试图将Abp框架签入个人网站中时,发现Abp的确不适合小型项目,在接触gensql网站快速开发之后,觉得使用Abp创建个人博客估计年底都完成不了,这不符合我快速开发的预期理念,因此放弃了code first,选择了db first。

gensql工具适合于做后台管理的模板生成器,并没有提供可以选择的前端主题,故我决定自行选择一个UI主题,选择了以前公司工作时用到的inspinia作为前端Ui,充分阐释了手上只有锤子,什么都是钉子的道理。

确定好前端Ui之后,接下来就需要选择博客的富文本编辑器。在
layui
summernote
ueditor等编辑器中进行了试验,发现都得自行编写上传图片和文件的逻辑,界面展示效果也没有很好看,故选择放弃这三个编辑器。
不经意间接触了MarkDown的语法,了解到了MDwiki能快速搭建博客站点,展示效果比在inspinia中的文章的文章页面效果要好,但是该MDwiki在手机端的展示效果并没有符合我的预期。

最终有幸接触了使用Hexo搭建个人博客(二)-安装部署hexo-theme-Wikitten的配置教程。参考这两篇文章终于搭建了60分小站这个站点。

由此可见,整个搭建个人博客的过程中我走了不少的弯路,如果最先接触最后的两篇文章就不要费劲这么多周折才搭建好一个个人博客网站。尽管不少曲折,但也因此我也学到了不少东西。之前并没有在博客园编写个人博客的习惯,毕竟博客园的编辑器相对MarkDown这种语法来讲显得比较臃肿。该网站又多出了一个作用:

  • 养成做笔记的习惯,归纳整理个人的知识库,有利于日后的检索和温习。

参考资料

字典数排序

题目内容

给定一个整数 n, 返回从 1 到 n 的字典顺序。

例如,

给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。

请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。

解题过程

初次接触这题,我试图用快速排序,堆排序等排序方式去解决该问题,但是程序运行之后,要么内存不足,要么复杂度达不到时间要求。
经过两天的瞎折腾,我突然茅塞顿开,找到了以下规律。

如果n<10,则1后面的数字为2,否则1后面的数组为10。

如果n<20,则2后面的数字为3,否则1后面的数组为20。

如果n<30,则3后面的数字为4,否则1后面的数组为30。

经总结如下

1
2
3
4
5
6
如果m<n
如果 m*10<=n
则下一位为m*10
否则下一位为m+1;
否则
结束。

代码示例

创建二叉树的类

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
/// <summary>
/// 二叉树
/// </summary>
public class TreeNode
{
public static int Globalvalue = 1;

public int value;
public TreeNode leftNode;
public TreeNode rightNode;

/// <summary>
/// 构造函数
/// </summary>
/// <param name="x"></param>
public TreeNode(int x)
{
value = x;
int leftvalue = x * 10;
int rightvalue = x + 1;
if (leftvalue <= Globalvalue)
{
leftNode = new TreeNode(leftvalue);
}

if (rightvalue <= Globalvalue && rightvalue % 10 != 0)
{
rightNode = new TreeNode(rightvalue);
}
}
}

二叉树的前序遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/// <summary>
/// 前序遍历
/// </summary>
/// <param name="tn"></param>
/// <param name="result"></param>
public void preOrder(TreeNode tn, List<int> result)
{
result.Add(tn.value);
if (tn.leftNode != null)
{
preOrder(tn.leftNode, result);
}

if (tn.rightNode != null)
{
preOrder(tn.rightNode, result);
}
}

调用前序排序方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
/// <summary>
/// 执行排序
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
public IList<int> LexicalOrder(int n)
{
TreeNode.Globalvalue = n;
TreeNode tn = new TreeNode(1);
List<int> result = new List<int>();
preOrder(tn, result);
return result;
}

总结

该方案并不是通过测试用例耗时最短的方法,毕竟不构造TreeNode类速度会更快,但是恰好复习了一下大学时候所学的二叉树遍历的相关知识,也是挺好的。

参考资料

这个男人来自地球——观后感

被人推荐了这个电影,看介绍时发现该这电影已经上映很久了。该电影是跟朋友独处一室时在网上找的资源看的,结果朋友看了该电影有点昏昏欲睡,说这电影这么垃圾,你也推荐给我看,还不如看《金刚狼2》。

电影——萝卜白菜,各有所爱

我看了一些低成本的电影,比如说《九死》,《这个男人来自地球》等,都基本上是一个房间内的故事。后者比前者的成本低许多,但是后者所要表达的思想要比前者深刻得多。

当你朋友说他是山顶洞人,活了14000年,家里的画是梵高亲手送给他的,他曾和哥伦布一起远航,听释迦牟尼宣扬佛教,然后他创建了基督教,因为每过十年别人发现他容颜从未老去,所以他才选择逃离现在居住的地方换个地方生活,你信不信?

该影片是一个悬疑电影,生物学家,历史学家,心理学家都试图证明主角john在说谎,我也在一步一步的思考男主是否在撒谎。但是等到大家都觉得john说的话无懈可击的时候,他才告诉朋友们这仅仅是我跟你们开的一个玩笑。最后的结局证明了john没有撒谎,但是该结局已经不重要了。

我个人觉得电影是否是佳作就是是否会引人思考生活的意义。

你在跟她人交流的时候是否会顾忌他人的感受?伊迪丝是虔诚的基督教教徒,然后约翰说我就是上帝。然后伊迪丝拳头紧握,就像是要扑上去揍他一样。
当威利掏出手枪要结束约翰的生命的时候,大家都认为他疯狂。但是大家并不知道他刚经历了亡妻之痛。常言道,说者无意,听者有心,我刚经历丧妻之痛,你却说你长生不老,自然会内心不平衡。

假如给你长生不老的机会,而且给你一个不老容颜,然后每10年就搬一次家,你会怎么样面对这件事情?

假如你朋友说出荒诞离奇的事情,甚至完全超出你的认知,比如他是穿越回来的说50年后的世界已经实现了星际穿越或者意念编程,你会不会相信?

假如你付出的努力都一直得不到肯定,一直被误解,你是否会想尽一切办法去证明自己?

假如说度日如年,那么你怎么度过你剩下的1万年,2万年?

地球上不会存在太多活了14000年的动植物。但是能活14000多天(38岁左右)的人类却多的去了。每个人在生活中也会遇到属于他(她)的艺术家梵高,冒险家哥伦布,导航者释迦牟尼。男主历经时代变迁,最终却一直是孤独一人。由于人的相似性,人找到可以陪伴自己一生的伴侣的成功率高了很多。

幼儿园,小学,初中,高中,大学,社会等各种不同的场合,聚散无常。初识时回眸一笑,毕业时车站送别,从此再也没见过面了。每个人都会有自己新的旅程了,短信,邮件,电话等等都是可以联系的方式,有了各自的生活之后,然后联系就渐渐地少了。

14000年能做什么?无人汽车,无人飞机,3D投影编程等等早就是见怪不怪的东西;癌症,艾滋病等等都是早已经解决的问题。换心脏就跟换内存条一样简单。结合最近几个世纪来看,在14000年的时间里,科技可以取得好几个质变的发展,甚至可以通过拷贝复制的方式来学习新的知识。

估计14000年之后,不变的就是感情的产生机制了,还是会像长出了牙齿,树枝发芽,头发变白那样处于不经意间发生了。

且不谈14000年之后你会怎么样?14000天之后你会怎么样呢?

怎么样搭建一个博客网站

这篇文章的最后编辑时间是2018年11月2日,在整理QQ空间的日志的时候发现的,QQ日志的标题很皮——有钱以后再弄这个。。。
点击进去一看发现是一个怎么搭建个人网站的日志,我觉得这套用一句话叫做梦想的实现会迟到,但是从不会缺席。
虽说该文的建站步骤和我搭建网站的过程并不相同,但是也是就是该文的思想已经埋在了我的潜意识中,只不过在恰当的时候表达出来了,也许是真的有钱了吧(_)(有钱就不会挂在github上面了…),以该文作为博客首页的文章也是最适合不过了。

准备工作

首先,你需要了解一些相关知识。你需要知道什么叫做IP地址,什么叫域名,静态网页和动态网页的区别等等。你最好能了解一下什么是asp,什么是php,什么是数据库,虚拟主机的原理,IIS或Apache的工作方式。如果你的XP里有IIS,你甚至可以实践架设一下服务器。有关的介绍网上遍地都是,这里就不再说了。这些知识你了解得越多越有助于下一步计划。

然后,准备好人民币。个人网站对空间的要求不高,一年大概100元到300元。最好把钱存在银行卡上并办理网上银行手续,目前招行和工商行的卡网上交易最通用。如果你曾有过网上购物的经历更好,网上买虚拟主机和在淘宝上买充气娃娃步骤几乎一样,前者还要简单一些,因为你不需要到邮局去取货。

选择空间商

现在网上的空间商太多了,选择一个好的空间商是很麻烦的事。你可以到一些站长论坛上去看看大家的建议。自己选择空间商时注意一定要选择正规的运营商。请务必注意查看这些空间商的主页上是否有完整的营业执照和许可证信息,是否有足够多的售前售后服务联系方式,是否有丰富全面的FAQ,是否有主机租用托管服务和机房介绍,虚拟主机是否可以免费试用。一个正规的虚拟主机运营商应该像这个样子。
接下来你需要选择主机型号。如果仅仅是想要建一个私人Blog,一个100MB的动态网页空间完全足够了。我还在我的空间里放了一些其它的东西,因此买了200MB。有兴趣的话你可以看一下其它参数,比如流量限制、并发连接数、CPU资源分配等等,但我觉得这些限制对于个人网站来说完全够了。你可以多了解一下子域名、子目录绑定等功能,以后可能会用得着。购买前还可以了解一下web管理功能,一些如自定义错误信息、RAR在线打包/解压、文件/目录保护之类的功能很有用。不明白的问题一定要问客服,顺便看一看客服的质量。
注意虚拟主机一般分为两大类,asp的和php的。前者的服务器一般是Windows系统的,后者一般是Linux系统。如果你不太熟悉Linux环境,建议你还是选用asp的主机。两种平台下都有很不错的私人Blog系统。我的这个空间就是asp的,使用的PJBlog的系统。php下最流行的Blog系统应该是WordPress,这个网站就是用的它。如果不深入研究源代码的话,两者区别表面上不大。这些私人Blog系统都可以在网上免费下载,然后上传到你的空间上使用。
这个月我准备把空间搬到maiteng.net,因为PJBlog官方网站就在用它。

购买域名和空间

拥有一个顶级域名是一件很酷的事情,以后你的朋友就可以通过www.xxxxxxxx.com来访问你的网站了,比如我就买了matrix67.com作为我的域名。有时候会出现域名已经被注册过的情况,这就要发挥一下你的想象力和创造力了。举个例子,假如dd牛发现dd.comdd.netdd.cn都没了,不妨申请一个2d.com,或者double-d.com;如果这些都没有了,再试试dee-dee.com;如果dee-dee.com也被占了,dexter-sister.com也不错啊(看过德克斯特的实验室么)。
下次MM过生日时不妨送给她一个顶级域名,名字就是你对她的爱称。再买上一个空间,里面放一个情侣博客,你们俩都可以更新。时不时地写几句甜言蜜语上去等MM来看,首页不停地滚动显示“早点睡觉”、“注意身体”,域名到期前保证把MM骗到手。
目前.com域名68元一年,.cn域名5元一年。加上一个100MB到200MB的asp空间大概100到300元,少去一次红灯区就可以搞一年的网站了。域名和空间一般在同一个地方一起买,这样你可以不用操心域名绑定的问题,并且往往有一些优惠。正式付款前你有几天的试用时间,你可以传一个探针上去测试一下,再试着安装自己喜欢的Blog系统,确保没有任何问题后再付款。

以后要做的事情

搭建好Blog后,你可以做一些简单的事情突出一点个性的地方,比如安装几个自己喜欢的皮肤,做一个简单的网站入口。然后把网址提交到搜索引擎的网站登录入口,你的网站就可以在一个星期内被搜索引擎收录。申请一个免费的网站流量分析服务很有必要,它可以告诉你很多信息,比如网站每天的访问数、每个访客平均访问的页面数、访客都是从哪里链接过来的。你可以分析这些数据并适当改进你的网站。Google分析和cnzz.com都是不错的免费统计服务。最后还有一件很麻烦的事就是备案。你的空间商很可能有代备案服务,否则你需要自己备案。提交备案信息后需要等一个月左右的时间,然后把备案证书放到空间的指定位置并在网站上做好链接就行了。再过几个月,你可以了解一下SEO、Adsense之类的东西。把你购买域名和空间的日期牢牢地记在心里,以后别忘了续费,否则域名被抢了看你找谁哭去。
拥有一个自己的网站空间后,你可能会像我一样突然对搞网站感兴趣。建议你看一看你的Blog的源代码,初步学习一下asp或php语言。你可以发现你能用它们做出很多不可思议的事情。

最后不得不说,这篇文章并没有任何实质性的东西,相关名词还是要麻烦大家自己搜索。
预祝大家建站顺利。

后记

愿大家温故一下埋藏在心底的梦想,也试图去实现一下,最后会成功的。

人狼羊菜2012年版本

这是我初接触编程时编写的Java代码,待有足够时间会重构该代码。

实现代码

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
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
假设开始人狼羊菜都是在A岸,目的是将人狼羊菜运输到B岸。
*/
public class Thing {
public static void main(String[] args) {
int i = 0, x, k = 0;
while (i != 15) {
k = 0;
if (((i % 2 == 0) && i < 8) || (i % 2 == 1 && i >= 8)) {
x = i ^ 9;
if (x != 3 && !(x >= 6 && x <= 9) && x != 12) {
i = x;
k++;
if(i>8)
System.out.println("人带菜从A岸到达B岸");
else
System.out.println("人带菜从B岸到达A岸");
}
}
if (((i / 2) % 2 == 0 && i < 8) || ((i / 2) % 2 == 1 && i >= 8)) {
x = i ^ 10;
if (x != 3 && !(x >= 6 && x <= 9) && x != 12) {
i = x;
k++;
if(i>8)
System.out.println("人带羊从A岸到达B岸");
else
System.out.println("人带羊从B岸到达A岸");
}
}
if (!(i >= 4 && i <= 11)) {
x = i ^ 12;
if (x != 3 && !(x >= 6 && x <= 9) && x != 12) {
i = x;
k++;
if(i>8)
System.out.println("人带狼从A岸到达B岸");
else
System.out.println("人带狼从B岸到达A岸");
}

}
x = i ^ 8;
if (x != 3 && !(x >= 6 && x <= 9) && x != 12) {
i = x;
k++;
if(i>8)
System.out.println("人独自一人从A岸到达B岸");
else
System.out.println("人独自一人从B岸到达A岸");
}
}
}
}

运行结果如下:

人带羊从A岸到达B岸
人独自一人从B岸到达A岸
人带菜从A岸到达B岸
人带羊从B岸到达A岸
人带狼从A岸到达B岸
人独自一人从B岸到达A岸
人带羊从A岸到达B岸

总结

该代码混乱不堪,类命名,变量命名都不符合编码规范,写出来的代码比反编译之后的更难阅读,抽时间会给出重构后的版本。

参考资料

野蛮何以成为文明的幌子

一提日本仇似海,从此智商是路人——这用来描述打砸抢日本车的激进人士很贴切。

游行示威,上街表达个人情感,我各种支持。但是倘若借爱国之名,行抢劫打砸之实就是强烈反对了。
有人说:打砸同胞已购买车辆是爱国。竟以电影《赛德克巴莱》里面的台词:“如果文明是叫我们卑躬屈膝,那我就带你们骄傲地野蛮到底”作为借口。我真不敢认同中国的文明是通过这种“野蛮”得到延续的。大刀向鬼子们的头上砍去,刀口何以指向了国内同胞的脖颈?当初人民选择买国产车还是日本车还是德国车是他们自己的权利。你若仇恨日本,自强身健体,工作兢兢业业,努力民强国富。何以借这“爱国主义”的名义来做伤害同胞感情的事情。
你可以将拳头挥向小偷,强盗,强奸犯等等,制止他们的作恶行为。何以自己到成为了强盗?做着伤害同胞的事情,并称之为延续文明的方式,这与鬼子的打砸抢烧又有分别?
简单讲讲我对中日,中菲,中美关系的看法:
首先,中日开战的底线是什么?自卫队登岛就是触碰了战争的底线,若自卫队登岛,政府还不有所作为,那就真到了怀疑执政党的执政能力的时候了。现在假借爱国主义进行所谓的打砸抢烧,受伤害的只是自己的同胞,并给日本人的生活平添了一些笑料。真的是一提日本仇似海,从此智商是路人,谁脑残去打杂日货,我就跟谁绝交!
其次,菲律宾对中国黄岩岛有觊觎之心,中国通过经济战,控制菲律宾香蕉的进口,从而使阿基诺三世的民意支持率下降,这是中方的不战而屈人之兵。日本对中国钓鱼岛有觊觎之心,中国民间激进人士却通过打砸抢烧伤害同胞的感情,怎么好意思说这就是爱国。孙子兵法说不战而屈人之兵是上上策,现在国家努力发展经济不强行占领岛屿,倒先民间自己损害自己的同胞的财产,自乱阵脚了。
最后,日本和菲律宾一样只是美国的一个棋子。中国可以不买菲律宾的香蕉从而使菲律宾的几十万蕉农失去生计;中国亦可以通过发展国家民族产业从而摆脱对日本产品的依赖性,通过经济上的独立从而摆脱对日本产品的依赖性。
但是中国倘若面对最终大boss——美国,也打砸抢烧么?
你怎么忍心打砸抢烧同胞们通过卖肾而来的ipad,iphone?
抵制美货的话,微软、可口可乐、高盛、强生等等自然不是是躲不过“爱国主义者”的洗劫。但是你倘若真的反美,怎么打这场战争?先不说你是否看日本的火影,海贼王,是否听过天空之城,风之谷类的。你真的很难说你没有接受过美国的文化“入侵”,大学英语必过四级,《变形金刚》《黑衣人》《阿凡达》《2012》等等。你若反美,自要抵制microsoft office,c++,java等等,开发一套属于自己的操作系统,自己的办公软件和自己的编程语言,从而摆脱对美国的依赖性。战争的形式自然不止一种,经济战,有赢就有输,像菲律宾自然是输得五体投地。但是一个国家不可能动不动都跟别的国家都贸易战,鹬蚌相争渔翁得利,这和闭关锁国又有什么分别?
对于那些听风就是雨喊怎么还不打,骂政府腐败无能的人,自然不想深究你在生活中是个什么样的人,你是否在自己的工作岗位上贡献你自己的一份力量。你是否尊重了哪些负重30多公斤30多公里进行拉练的士兵。你若身体符合军人标准,你是否有弃笔从戎,远赴边疆抛头颅,洒热血之心?
我也是吃着地沟油的命,操着中南海的心。但是还是希望大家理性爱国,不要让我为你的智商着急。对同胞野蛮绝对不是延续文明的理由,那只是表明自己是个野蛮人罢了。

焚书指南

在《后天》那部电影里,有一个特别值得玩味的桥段:一群人为了躲避严寒,钻进了纽约的市立图书馆。他们为了取暖,不得不把书拿出来烧掉,但对于先烧什么书而争执不下,最后所有人一致同意,先烧税法!

在这个寒冷的早春北京,我重看了一遍《后天》,然后想,假如——仅仅只是假如——北京也遭遇了一场千年不遇的严寒,一些北京市民被迫涌入首都图书馆,也同样需要烧书取暖时,他们会如何抉择?

仔细想想,这是一个很有趣的心理测试题。有点像“如果你流落到荒岛,会带什么书”之类的问题。但这个题目,比荒岛带书要更有内涵,测试题的关键在于两点:你喜欢的书,可能只有一两本;讨厌的书,却有一大堆。先烧什么书?后烧什么书?该如何排序。更何况,你还要清楚地知道,讨厌的书,并不等于没有价值。你现在处于大灾变期间,如果幸存下来,必须要肩负起延续人类文明的责任。有些书你也许会极端讨厌,但对文明存续非常重要——比如线性代数课本和元素周期表。秦始皇当年焚书,都特意把农书、历书什么的留下呢。

如果是我的话,第一批被投入火堆中的书,毫无疑问是成功学和励志书。我一向有一个偏见,成功学这种东西,只会让人尽可能地远离成功而不自知,它的效果不会超过小时候在作文本上抄录名人名言,还费纸。再者说,大灾变后,人类社会已经有了极大改变,传统成功学规律已经不适用,烧了丝毫不可惜。这些书还有一个显而易见的优势:成功学这两年出得太多了,拿来当燃料,可以烧很久。

第二批要投入火堆的书,是各种生活保健书。一个朋友的母亲,身体不太好,但是笃信各路神仙的保健养生学,今天生吞泥鳅,明天喝绿豆汤;这个月茹素,下个月要排毒。身体没见好转,冰箱中奇形怪状的东西和吃饭规矩却是越来越多了。我那朋友抱怨说,每本保健看起来都言之成理,连在一起看,却只会搞得整个身体系统无所适从。反正以后都已经是冰河期了,资源贫瘠,有得吃就不错了,不能挑拣,所以这些养生书还是烧了吧。这不是一个养生的时代,是一个逃生的时代。

等到养生保健类的书烧完以后,第三批需要投入火中的,是各路明星们出的自传、感悟和经历。这类书装帧一般都很好,还会配上许多与世界政要合影的彩色照片,应该会很耐烧——唯一的问题是,这类书中水分太多,会不会影响燃烧效率,还有待科学家研究考察。

图书还有一个大类,讲星象占卜。我是个坚定的无神论者,这些书于我用处不大。而且我有一个很好的检验方法:翻开书,按照每一个占卜系统来估算自己的命运以及本周运势——别忘了,我们现在是假设身处大灾变时代,所以如果这本书没算出来是大凶之兆,那肯定不准,直接烧了就是。如果侥幸被它说中了,那也烧,反正大部分算命的人,都不喜欢听不吉利的话。

后来一次吃饭的时候,我把这道测试题跟好几个朋友说了,并且说了自己烧书的次序。他们都很有兴趣,每个人都发表了自己的看法,有的先烧青春小说再烧旅游指南,有的烧了历史普及类的犹嫌不过瘾,还要去拿高中教辅与公务员题库出气。

最后还是一位杂志的主编给出了最好的办法。他听完我们的烧书次序,淡然地弹了弹烟灰:“哪儿用得着那么麻烦,不用分类,直接按年份烧,最近几年就没出过能看的书!”

虚荣心,促进经济发展

商纣王在请工匠用象牙为他制作筷子,他的叔父箕子认为,既然使用了稀有昂贵的象牙作筷子,与之相配套的杯盘碗盏也不会用陶制土烧的笨重物了,而必然会换成用犀牛角、美玉石打磨出的精美器皿。餐具一旦换成了象牙筷子和玉石盘碗,你就一定不会再去吃大豆一类的普通蔬菜,而要千方百计地享用耗牛、象、豹之类的胎儿等山珍美味了。尽情享受美味佳肴之时,你不会再去穿粗布缝制的衣服和住在低矮潮湿的茅屋下,而必然会换成一套套的绫罗绸缎,并且住富丽堂皇的宫殿之中。这个并不是个例,而是现在社会中非常普遍的生活现象。倘若没有攀比,人人都只要满足每天的衣食住行,也就没有所谓的三次科技革命,也就没有那么多的奢侈品的出现了。

假期在跳蚤市场淘到慕容雪村的《伊甸樱桃》,开始并不知道是什么类型,被书最后一页的内容所吸引,回到家才知道这本书是介绍名牌的书籍。这书并不是介绍什么耐克,阿迪达斯等牌子,而是LV,万宝龙,宾利,迪奥,伯百利,劳力士,罗特斯,卡地亚,韦奇伍德,杰尼亚,阿玛尼,登喜路,夏奈尔,菲拉格慕,拉斐,蒂梵尼,百达翡丽,斯坦威,艾乐森,普拉达,吉凡克斯等牌子,恕我孤陋寡闻,我以前基本上不知道这些牌子,把书给我妈妈看这些牌子的介绍,眼珠子都要掉下来似的,自言自语了一句:“一辈子都是农民的命”。

万宝龙有一款皇家钻石墨水笔,镶有四千八百一十颗碎钻,售价人民币约一百二十万元。一个人,4000一月的月薪的话,不吃喝拉撒不生病不付房租等等其他所有一切费用都免掉。其实也不要工作蛮久,也只要250年。时间很容易过的,眨一下眼,一下子就过去了。250年后也只不过是一些元素的重新组合而已。当然我们难以否认有些物品的价值的确比较高。稍微有点智商的人都知道一块金子比一块板砖值钱。一颗钻石比一块木炭值钱。但是有些商品是否真的物有所值?这个其实并不要我举很多实例,大家都是明眼人。iphone4s的成本1200元以内,售价4500元以上,硬件成本如此,软件也算部分成本。但是这利润空间还是很足的,但是这个根本就不愁卖不出去,因为现代的商纣王(算我欠抽)多得是,为了满足所谓的虚荣心,从而产生一种优越感,根本就不会考虑这个是否物有所值,或许早已觉得花这么多钱来获得虚荣心所带来的优越感是值得的。商家正是知道如此,从而可以牟取暴利。

虚荣心让月薪4千的人在月薪4万的人面前抬不起头,月薪4万的人在月薪40万的人面前抬不起头。不知道是我的目光短浅还是社会本身如此:只要通过自身努力,正值青春年少的我们要满足基本的衣食住行是根本不成问题的。但是现代社会的三粒毒药消费主义、性自由和成功学已经把我们毒害得不浅,我们的幸福感在比较中得来的,而且不是跟纵向的自己比较,而是跟横向的她人比较,而且不管起跑线是不是一样。家的N次方中的拜金女赵雯虚荣心作祟,并没有规规矩矩的获得物质上的满足,最后弄得别人见而避之,这个因为虚荣心成名,到最后也毁在虚荣心上面,还好决心悔改,依靠自己的真实能力获得了自己想要的。

我们的底线或原则或许并不是适合这个社会的生存法则,为了钱,更多的钱仅仅依靠正道并不是不可以,但是这个就得耗时间。赚4万,4000月薪一月要10个月,4w一个月就要一个月。玛力多玛力玛力多,多了可以展现在房子多豪华上面,可以展现在多少个LV上面,多少个劳力士上面。也许劳力士能让时间停止,人们就可以穿越时空。我没有黑劳力士的意思,我承认劳力士的做工精细,品质高雅。我只是想说:人的虚荣心是很难满足的,如果每个愿望都可以实现的话,上帝早就下岗了。拼搏是好的,人都得为自己的幸福付出。但是你总得清楚自己的力量,还有愿望得到满足好,内心深处是否真正的感到幸福。

倘若没有虚荣心,就没有所谓的浪漫,就剩下平淡的生活,就没有所谓的经济高速发展。人活在世,是需要闹腾一下,不枉走此一遭。人生如戏,请你别演砸了。