2007-10-15

《程序员》2007第十期算法擂台之JAVA解法

关键字: 算法 猜数字 程序员 算法擂台
题目: 引用 人和计算机做猜数游戏.人默想一个四位数,由计算机来猜.计算机将所猜的数据显示到屏幕上,并问两个问题:一,有几个数字猜对了;二,猜对的数字中有几个位置也对了.人通过键盘来回答这两个问题。计算机一次又一次地猜,直到猜对位置。 为了简化输入输出,计算机每次输出一个四位数,然后人输入两个用空格分开的数,分别表示有几个数字猜对,有几个数字位置也对。下面有某次猜数过程:人默认的数是3422,奇数行是计算机猜的数,偶数行是人输入的信息。在这个例子中,计算机第五次猜中了数,在人输入4 4后程序结束退出. 请你写一个这样的猜数游戏,看看你所想的数能在几次后被程序 ...
2007-09-16

《程序员》2007第九期之算法擂台

关键字: 算法 程序员 算法擂台 骑士聚会 Floyd-Warshall
原题:在8*8的棋盘上分布着n个骑士,他们想约在某一格中聚会.骑士每天可以像国际象棋中的马那样移动一次.请你计算n个骑士的最早聚会地点和要走多少天.要求尽早聚会,且n个人走的总步数最少,先到的骑士可以不再移动等待其它骑士. 输入:从键盘输入n(0<n<=64),然后依次输入n个骑士的初始位置xi,yi(0<=xi,yi<=7) 输出:以空格分隔的三个整数,分别为聚会点的x,y值,以及要走多少天        对问题的分析:为了解决这个问题,显然我们得想办法能计算出骑士从棋盘上的某个格子到其它格子需要的最少步数. (另一方面,很 ...
2007-08-19

《程序员》2007第八期之算法擂台

关键字: 算法 程序员 动态规划
题目描述(手头没书,不知道有没有记错):有v个在一条直线上的村庄,要在其中的p个村庄上修建邮局。每个村庄将会选择离其最近的村庄收发邮件。现在要选择这p个邮局的修建地址,使得这v个村庄到邮局的总路程尽可能少。 输入:首先是两个正整数v,p,表示村庄个数与邮局个数。 然后是v个不小于零的整数,表示v个村庄的坐标。 输出:p从小到大个用空格分开的整数,表示p个邮局的坐标。 这个题目用简单的重举法显然是行不通的,那样时间复杂度将达到阶乘级别。 我用的是动态规划,时间复杂度为O(n*n*(n+p)).不知道有没有更好的算法。 注意:这个题目的解实际上不唯一,比如v=2,p=1的情形,邮 ...
2007-08-01

一个关于字符串操作的算法题

关键字: 算法 字符串 行程编码
最近在网上看到一道关于字符串操作的算法题,不过原题的表述以及给出的数据都有问题.这里我给出修正后的题目: 题目:设计一个方法 String encode(String str),对字符串str进行如下转换操作为一个新字符串:          逐个扫描str的每个字符,          1.若当前字符为'_',则添加"\UL"到新字符串; 否则:       ...
2007-06-21

二维点集的凸包及其直径(1)

关键字: 凸包 Graham 水平排序
前言:因为前几天做了一个有关凸包的题,并答应crackerwang写个blog解释一下我的算法.因为我比较懒的原因,一直拖到现在才写.预计一共有两篇,第一篇介绍求二维点集凸包的O(N*logN)时间复杂度的算法.第二篇介绍求凸包直径的O(N)时间复杂度的算法. 下面首先给出http://acm.tju.edu.cn/toj/showp2847.html该题的C++代码,本文将使用Java代码来描述.  cpp 代码 /**   * TJU 2847 的C++解法   * Wr ...
       晚上无聊的时候把以前的<程序员>杂志拿出来see see,于是就看到了这个算法题.这文章之前也看过,但当时稍微想了一下就溜过去了.今天看的时候突然产生了一些疑问,于是动手写了几行代码测试了下,结果发现文章中的说法并不完全対.       哦,讲了这么久,忘了说这个题在杂志的第65页的第二题.      注意:原文并没有给出最优策略的定义,我这儿根据原文的意思考虑的是这样一种策略:     ...
2007-03-26

几个经典的博弈问题

关键字: 博弈 算法
有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个 人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏 ,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够 取胜。 (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规 定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个, 后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果 n=(m+1)r+s,(r为任意 ...
2007-03-14

求1~N中1出现的次数的递归算法

关键字: 递归 算法
        在网上看到的一个算法题,据说是某个大公司的面试题。题目如下:给出一个数n,求1到n这些数中1出现的次数        这个题是典型的用递归算法来解决的,代码如下: java 代码 import java.math.BigInteger;    import java.util.*;    /**   *求1到N这些数中1 ...
2007-02-26

利用正则式计算表达式的值

关键字: JAVA 正则式 表达式 求值
RT,最近又看了下JAVA的正则式,解决了之前对JAVA中正则式的一些疑问. 写了个利用正则式计算表达式值的代码.算法很简单,就是"先乘除,后加减,有括号先算括号里的" ps:当然,计算表达式值最常用也最有效的方法是利用逆波兰式,这儿只是拿正则式来练练手. 程序没有经过严谨的测试,可能有bug. java 代码 import java.util.regex.*;    import java.util.*;    /**   *利用正则 ...
Eastsun
搜索本博客
我的相册
Ba2baf55-8a44-300c-973d-5f0a8705818e-thumb
businessblacksteel1.png
共 60 张
最近加入圈子
存档
最新评论