
有意思的程序练习题
逐兔郎
想做大牛
展开
-
(Hanoi)汉诺塔java实现程序
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 图片来源:http://caterpillar.onlyfun.net/Gossip/Algo原创 2012-04-23 21:21:07 · 11779 阅读 · 0 评论 -
最大的子序列和问题
参考:数据结构与算法分析——Java语言描述(美) Mark Allen Weiss 给定整数 A1,A2,……AN (可能有负数),求这个整数序列的最大子序列和。(原书假定如果所有整数为负数,则最大的子序列的和为0。我们这里去掉了这个假定,算法1和算法2只需要把maxSum初始设为 a[0] 即可,算法3做了些修改)例如:-2 ,11,-4,13,-5,-2, 答案为 20(从A2原创 2012-04-25 20:57:11 · 1079 阅读 · 0 评论 -
计算一个字符串表示的四则运算表达式
题目大意:有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。四则运算即:加减乘除"+-*/",另外该表达式中的数字只能是1位(数值范围0~9)。另若有不能整除的情况,按向下取整处理,eg: 8/3得出值为2。 例如若有字符串"8+7*2-9/3",计算出其值为19。 代码如下: package com.interview;public class原创 2012-08-26 20:58:12 · 9832 阅读 · 5 评论 -
用不相交集数据结构生成迷宫
之前提到的不相交集数据结构(:http://blog.youkuaiyun.com/zhutulang/article/details/7791804。)的一个应用的例子是迷宫的生成。如下图所示就是一个50*50的迷宫。 它的开始点位于图上的左上角,而终止点在图上的右下角。可以把这个迷宫看成是由50*50个单元组成的矩形,左上角的单元被连通到右下角的单元,而且这些单元与邻近的单元通过墙壁原创 2012-07-27 15:41:58 · 3576 阅读 · 2 评论 -
用java画国际象棋棋盘
用java画了一个国际象棋的棋盘,不难,还是挺好玩的。package com.test;import java.awt.BorderLayout;import java.awt.Color;import javax.swing.BorderFactory;import javax.swing.JFrame;import javax.swing.JLabel;impo原创 2012-07-24 20:30:43 · 11442 阅读 · 0 评论 -
用1、2、2、3、4、5这六个数字,打印出所有不同的排列,……
据说这是一个公司面试题:用1、2、2、3、4、5这六个数字,打印出所有不同的排列,如:512234、412345等,要求'4'不能在第三位,'3'与'5'不能相连。我花了点时间做了下,思路是这样的:先得到这些数字的全排列,然后根据条件筛选。得到全排列的方式,我用到了之前的一篇文章里的递归的方式:http://blog.youkuaiyun.com/zhutulang/article/details/75946原创 2012-07-23 15:32:26 · 12938 阅读 · 0 评论 -
java单链表实现一元多项式加法和乘法运算
设有一个一元多项式 f(x)=∑aixi ,我们要用一个单链表将它表示出来,并实现它的加和乘运算。多项式的每一项放在一个结点中,每个结点中放两个信息,即每一项的系数和幂。在这里我们用有头结点的链表来表示,那么对于某个多项式 p=2x2+100x3+45x5+3x20 ,它的单链表表示如下: 尽可能地简单,结点PolyNode类如下: package poly;原创 2012-05-15 22:26:31 · 18340 阅读 · 3 评论 -
丢手帕问题的双向环形链表实现
问题:设编号为1、2……n的几个小孩围坐一圈,约定编号为k(1= 我们现在用一个双向环形链表来解这一问题。先来看看下面这幅图: 圆圈代表一个结点,红色的指针指向下一个元素,紫色的指针指向上一个元素。first指针指向第一个元素,表明第一个元素的位置,cursor是游标指针,它的作用重大。那么这个环形的链表就可以模拟小孩排成的圆圈,下面是具体的代码:publi原创 2012-05-11 20:20:11 · 3919 阅读 · 0 评论 -
约瑟夫问题
约瑟夫问题本身好像挺简单,但它的变化形式有很多,各个问题又好像都有一些不一样,实在把人弄得头晕。先看看它的原型。参考百度上这个故事的来源:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必原创 2012-05-11 15:37:37 · 1653 阅读 · 0 评论 -
老鼠走迷宫问题
参考:http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/MouseGoMaze.htm问题:有一个迷宫,在迷宫的某个出口放着一块奶酪。将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪。请找出它的行走路径。解法:这个问题可以用递归的方法去求解。 先来看下面这幅图: 绿色箭头指向的是迷宫的入原创 2012-05-06 15:58:22 · 15298 阅读 · 0 评论 -
三色旗问题
参考:http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/ThreeColorsFlags.htm问题:假设有一根绳子,上面有一些红、白、蓝色的旗子。起初旗子的顺序是任意的,现在要求用最少的次数移动这些旗子,使得它们按照蓝、白、红的顺序排列。注意只能在绳子上操作,并且一次只能调换两个旗子。解法:从绳子的开头(最左边)开始,遇到蓝色的往原创 2012-05-05 16:54:06 · 9481 阅读 · 2 评论 -
打印杨辉三角形
参考维基百科: 杨辉三角形,又称贾宪三角形、帕斯卡三角形,是二项式系数在三角形中的一种几何排列。 杨辉三角形同时对应于二项式定理的系数。 次的二项式系数对应杨辉三角形的行。 例如在中,次的二项式正好对应杨辉三角形第3行系数1 2 1。 如下。n+1行的数字实际上是(a + b) ^ n展开后的结果。原创 2012-05-04 21:20:57 · 5175 阅读 · 0 评论 -
欧几里德算法(又称辗除法)求最大公约数
一、首先给出我计算最大公约数(greatest common divisor)的算法(很直观就不详细说明了):代码如下:public long gcd(long a,long b){ long c=Math.min(a, b); while(true){ if(a%c==0 && b%c==0){ break; }else{原创 2012-04-26 19:47:16 · 2896 阅读 · 0 评论 -
高效的求幂运算
参考:数据结构与算法分析——Java语言描述(美) Mark Allen Weiss 计算一个整数的幂 XN 的常见算法是使用 N-1 次乘法自乘。然而我们可以找到更好的算法。可以应用这样一种递归算法:如果 N 是偶数,有XN=XN/2 * X N/2 , 如果 N 是奇数,则有 XN =X (N-1)/2 * X (N-1)/2 * X 。原创 2012-04-26 20:58:59 · 5371 阅读 · 0 评论 -
经典兔子问题
参考:http://episte.math.ntu.edu.tw/articles/sm/sm_02_08_1/index.html假定一对兔子在它们出生整整兩个月以后可以生一对小兔子,其后每隔一个月又可以再生一对小兔子。假定现在在一个笼子里有一对大兔子和它们刚生下來的一对小兔子,请问一年以后笼子应该有几对兔子?这实际上是一个费氏数列的问题。百度百科:斐波纳契数列(Fibonacci原创 2012-04-23 22:24:09 · 6025 阅读 · 0 评论 -
java递归实现全排列
有1~n的n个整数,现要求打印出这n个数的所有可能的排列。比如 1 、2、3的全排列: 1, 2, 3 1, 3, 2 2, 1, 3 2, 3, 1 3, 1, 2 3, 2, 1 我在网上找到了一个用递归求全排列的例子,稍微改了一下,现在贴出来,因为感觉这个例原创 2012-05-23 14:46:49 · 11477 阅读 · 1 评论