编程之美读书笔记:将相问题

原创 2013年12月02日 21:22:35
久闻大名的一本书,现今才买来细细的品读,比较的惭愧啊,废话不多说,开始自己的拜读之旅。由于工作中主要是Java,书中是C++的代码,会尽量的转成Java代码,一来可以更加便于理解,二来那能够敲敲代码,发散一下思维。

从1.2节,将相的问题开始,第一次看到题目,直接的无语了。感觉“代码中只能使用一个字节存储变量”,这个实在难为人,事实上,这个是一个提示的信息。很有一种感悟的说法:最难的那一点,就是最简单的一点。

从这个一个字节入手,就知道了只能使用byte类型,或者int类型,这里就要顺便的复习一下基本类型所占的空间了,利用java代码编写程序,可以很清楚的得到java基本类型的基本的信息:代码放在这里,看看输出的都是什么。

System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE); 
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE); //。。。。。。。

从运算得到的结果看,就是byte,表示的数据的话,那么就引出了怎么样使用一个byte来表示循环时的内外两层的数据,把byte分拆,这个我个人认为是一个点,想到了,自然就能想到后面的怎么样把左半边和右半边来读入和存起来。想不到的话,就会坑在在这里。

看到这段代码的时候,自己真的有点感觉到“美”了,呵呵

int i = 81;
while (--i>0) {
if(i/9%3 == i%9%3){  //从这里可以看到"/"运算比较的“慢” 相对于"%"来说那么除的运算可以作为一个外层的循环,而%可以作为一个内层的循环
continue;
}
System.out.println("A = "+(i/9+1)+" B = "+(i%9+1));
}

如果从应用的角度说,我非常希望能够拥有一个良好的注释,不然的话的,对后来者维护来说这个是一个灾难。话说回来,越是精妙的算法,越是比较的难以理解,这个算法就在于利用的:/和%运算之间的关系。

最想看到的却是解法3的代码,一个是算法表述的比较的清晰,另外就是效率也比较的好.很可惜的是Java并不支持,定义一个类的话,开销就比较大了。另外的附上自己从网上找的结合自己的想法改进的一个算法。

//外层循环变量使用i的第4-7位,初始值为0X10 就是16,最大值为0x90。
		//内层循环变量使用i的第0-3位,初始值为b+1,最大值为9。
		for (byte i = 0x10;i < 0x90&&i>0X0; i += 0x10)
		    //(byte) ((i & 0xF0) | (i >> 4)) 把i的前四位复制到i的后四位
		    for (i= (byte) ((i & 0xF0) | (i >> 4)); (++i & 0xF) < 10; )
		      if (((i & 0xF) - (i >> 4)) != 3 && ((i & 0xF) - (i >> 4)) != 6){
		    	  System.out.println("A=" +(i >> 4) + ", B=" + (i & 0xF) +"\n");
			  System.out.println("A=" +(i & 0xF) + ", B=" + (i >> 4) +"\n");//利用对称的性质,这点离算法有点远了
		      }


再者,就是说到了定义一个类的开销,具体的详细说明:http://andyao.iteye.com/blog/146124

相关文章推荐

《编程之美》读书笔记(一):中国象棋将帅问题

《编程之美》读书笔记(一):中国象棋将帅问题   http://blog.csdn.net/kabini/article/details/2256421   作者:薛笛   EMail:jxued...

《编程之美-读书笔记》-1 中国象棋将帅问题

题目要求——象棋棋盘上以A代表将,B代表帅,将帅不能相对,请输出所有合理的位置。A,B均可以以数字1到9的九宫格来显示。另外要求,只能用一个变量。  A ——         1 2 3 ...

编程之美读书笔记: 1.2 中国象棋将帅问题

中国象棋将帅问题: 在一把象棋的残局中,象棋双方的将帅不可以相见,即不可以在中间没有其他棋子的情况下在同一列出现。而将、帅各被限制在己方的3*3的格子中运动。相信大家都非常熟悉象棋的玩法吧,这里就不...

《编程之美》读书笔记之[中国象棋将帅问题]

我是个学生更是只菜鸟,我是怀着拜读之心翻开的这本书,即将走上IT岗位的我不敢怠慢。中国象棋将帅问题的笔记和心得如下:         问题描述: 中国象棋,棋盘上只有“将”和“帅”,按照中国象...
  • xpmars
  • xpmars
  • 2011年08月01日 10:02
  • 1250

《编程之美》读书笔记(一):中国象棋将帅问题

千呼万唤始出来,在跳票了快一个月之后,虽然明知道书里还有不少错误没改过来(附了一整页的勘误),但是感觉已经不能等下一版了。赶快去书店买回来,吃完饭躺床上舒舒服服地看。大致翻看之后,总体感觉是书中的内容...

读书笔记--《编程之美》--中国象棋将帅问题

《编程之美》---1.2 中国象棋将帅问题           中国象棋将帅问题由于比较简单,所以我们暂时不用请出《算法导论》。该问题的具体描述是:(根据中国象棋的基本原则)在只有双的将帅...
  • Lieacui
  • Lieacui
  • 2016年06月14日 14:45
  • 229

)《编程之美》读书笔记(一):中国象棋将帅问题

 千呼万唤始出来,在跳票了快一个月之后,虽然明知道书里还有不少错误没改过来(附了一整页的勘误),但是感觉已经不能等下一版了。赶快去书店买回来,吃完饭躺床上舒舒服服地看。大致翻看之后,总体感觉是书中的内...

编程之美读书笔记1.2——中国象棋将帅问题

问题:题目:下过中国象棋的朋友都知道,双方的“将”和“帅”相隔遥远,并且它们不能照面。在象棋残局中,许多高手能利用这一规则走出精妙的杀招。假设棋盘上只有“将”和“帅”二子(如图1-3所示)(为了下面叙...

JAVA编程思想读书笔记

  • 2014年10月22日 12:59
  • 82KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程之美读书笔记:将相问题
举报原因:
原因补充:

(最多只允许输入30个字)