java
JoeCSG
这个作者很懒,什么都没留下…
展开
-
编程算法基础-3.1自顶向下风格
第三讲 风格与模式3.1自顶向下风格复杂问题分解,直到小问题足够简单,可以掌控为止是一种思考方式把大的任务不断的分解为更小的子任务 另一法宝:忽略,忽略细节 程序问题制定框架---》逐步细化---》逐步精华---》分解为子问题打印特定的形状做一个二维数组的缓冲区向缓冲区输出缓冲区输出屏幕上数组初始元素都是0 表格:横线,竖线。原创 2014-04-27 23:37:15 · 1051 阅读 · 0 评论 -
编程算法基础-假设修正法
1.3假设修正法衡量一个软件的质量的标准是什么?正确性,运行效率,稳定性,可读性(逻辑清晰、简明,甚至有时可以牺牲效率)求最大值求a,b,c三个数中的最大值。/*有a,b,c三个数字,求最大值。*/package AsumeCorrect; public class MaxNumber { public static void main(String[] args原创 2014-04-20 20:35:41 · 1683 阅读 · 0 评论 -
编程算法基础-枚举与剪枝
1.2枚举与剪枝暴力破解虽然简单有效,但是有弱点,考虑的情况很多时,计算机承受不了。人为排除一些不可能的情况。剪枝就是为了让计算机尽量避免无用的徒劳的动作。找零方案要找8元零钱,有零钞:5元,2元,1元,5角求所有找零方案。 5角如果写成浮点型的,在计算相等的时候会产生误差,所以全部扩大十倍,再进行比较。/*要找8元零钱,有零钞:5元,2元,1元,5角求所有找原创 2014-04-20 10:27:01 · 1718 阅读 · 1 评论 -
编程算法基础-常数变易法
1.4常数变易法常数变异的思考方法当程序中有许多因素都在变动的时候,我们可以假设其中的某些变数为常数,把他们写成固定的死值。将来再用变量替换。星号金字塔常数变异典型应用 打印这个金字塔: * * * * * * * * * * * *原创 2014-04-21 15:55:47 · 1841 阅读 · 2 评论 -
编程算法基础-一刀切法
1.5一刀切法编程和编筐一样,处理边缘问题同样重要。程序逻辑 开始 中间 结束 一刀切法上式用空格或逗号分隔的串,提取为各个部分abc ttt,kmd,uuu xyz切分成每一部分。/* * "abc ttt,kmd,uuu xyz"用逗号或者空格隔开字符串分解为各个部分*/package One原创 2014-04-21 16:01:48 · 2297 阅读 · 3 评论 -
Java Collection
yuanhttp://my.oschina.net/xiaomaoandhong/blog/78394在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便。这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结构中熟知的。例如Map,Set,List等。并且Java用面向对象的设计对这些数据结构和算转载 2014-04-16 22:23:25 · 588 阅读 · 0 评论 -
编程算法基础-3.2自底向上风格
3.2自底向上风格自顶向下不是万能的需求发生变化时,会很尴尬变化是需求的本质特征内部或外界的环境一旦发生小小的变化,就会造成很大的变动 个人---完全掌控-----》简单的软件逻辑《-----完全计划的模式小组协作---掌控变化----》庞大的软件规模---产生--》自适应变化《-----解决-----主流解决方案:面向对象面向对象正是采用自底向上的设计风格打印原创 2014-04-30 11:22:39 · 1221 阅读 · 0 评论 -
双栈结构_表达式求值
import java.util.HashMap;import java.util.Map;import java.util.Stack;public class MyA { //定义计算的方法 static void calcu(Stack data, Stack op) { int b = (Integer) data.pop(); int a = (Integer)原创 2014-03-08 19:16:07 · 1311 阅读 · 0 评论 -
井字棋代码
井字棋代码package a;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Scanner;import java.util.Set;public class TT2{ private Scanner scan; Set set_a原创 2014-03-10 21:33:58 · 4228 阅读 · 1 评论 -
编程算法基础-暴力破解法
1.1 暴力破解法鸡兔同笼50头,120脚,鸡兔分别几只?/*鸡兔同笼 * 鸡兔同笼,头50,脚120 * 鸡兔几何?*/package ChickRabbit; public class ChickRabbit { public static void main(String[] args){ int chick; int rabb原创 2014-04-20 10:18:54 · 3558 阅读 · 0 评论 -
编程算法基础-数字数码管-隐藏密码
作业数字数码管数字或字母可以用7位数码管显示(就是排列为8字形的7个数码管) @@@@ 0 @ @ 1 2 @ @ 3 @@@@ 4 5 @ @ 6 @ @原创 2014-04-21 22:09:27 · 2049 阅读 · 0 评论 -
编程算法基础-2.7作业-通讯编码-格式检查
作业通信编码假设通信的物理设备只能表示1和0两种状态。1和0状态都不能持续太久,否则物理设备会出现故障。因而人们设计出一种变通的方法:多个0后人为地补入一个1多个1后人为地补入一个0当然,在解码的时候,要相应处理。下面我们用串来模拟这个算法。假设有需要通信的串:String s = "101010010010000101111010001010101010000原创 2014-04-27 19:43:21 · 1450 阅读 · 0 评论 -
编程算法基础-2.6加密与解密
2.6加密与解密密钥:对称式密钥,非对称式迷药 对称式密钥:明文(尚未加密原文)------加密------》密文 这个过程需要一个密钥X去加密 密文-------解密-------》明文 解密过程需要一个密钥X,和加密的是同一个密钥非对称式密钥:通过某算法产生一对钥匙,选一个作为公钥原创 2014-04-26 21:04:56 · 1512 阅读 · 0 评论 -
编程算法基础3.3-测试驱动风格
3.3测试驱动风格严格的说测试驱动风格不是设计风格,它是为了能够保证程序员思路清晰热情持续,我们采用的一种策略。 部队长时间在雪地上行走,会出现雪盲症,战士出现幻觉,像梦游,注意力不集中一般派先前部队在路上在地上撒一些树枝或别的东西解决。 同理,程序员也一样,如果长时间编码缺少反馈,也会使程序员思维钝化,产生幻觉。测试驱动可以使程序员能够把他的任务转变为不断地制造错误和原创 2014-05-18 20:49:16 · 1189 阅读 · 1 评论 -
编程算法基础-2.5正则表达式进阶
2.5正则表达式进阶正则表达式的功能相当强大Java 提供Pattern,Matcher类Pattern:代表正则表达式本身 对正则进行预先编译处理 提高处理的效率Matcher:代表正则匹配的结果 实现更加复杂的管理原创 2014-04-24 17:40:13 · 865 阅读 · 0 评论 -
编程算法基础-2.4正则表达式初步
2.4正则表达式初步现代计算机大多数处理非数值任务所以应当熟悉串的API串的: 搜索 匹配 分隔 替换处理工具:正则表达式regular expression其发展已经相当成熟,几乎可以当做一门独立的语言有一套完整的规则和独立的语法系统 Java内置了对正则的支持 Java串的API中涉及的正则表达式Split正则表达式应用——S原创 2014-04-24 13:03:26 · 858 阅读 · 0 评论 -
编程算法基础-2.2串与数值的转换
2.2串与数值的转换串与整数的转换把任何东西转化为串,只要把它加上一个空串,任何值和串相加,结果都是串。 Integer.parseInt将串转换为整数 有时也采用直接的逻辑方式 串转整数String s = “9527”;/*串转整数String s = "9527";*/ package StringToInteger; public cla原创 2014-04-23 10:39:15 · 1381 阅读 · 0 评论 -
编程算法基础-2.3进制转换
2.3进制转换使用int存一个整数时,内存中是用二进制存储的,当要显示的时候,用十进制显示。任意进制间的转换n进制转m进制String s = “2001201102”3进制转换为5进制 先转换为2进制,再转换为5进制/*任意进制间的转换n进制转m进制String s = “2001201102”3进制转换为5进制 先转换为10进制,再转换为5进制*/原创 2014-04-23 16:54:12 · 1908 阅读 · 2 评论 -
编程算法基础-2.1活用串的API
2.1活用串的API串是Java中最常用的类型,而且是复合类型串十分常用,最好对其API文档熟悉。判断串中有没有重复的字符String s =”abcdebxyz”;判断其中有没有重复字符/*判断串中有没有重复的字符String s ="abcdebxyz";判断其中有没有重复字符*/ package StringAPI; public class JudgeR原创 2014-04-22 21:10:42 · 1397 阅读 · 1 评论 -
用概率模拟法求圆周率pi
用概率模拟法求圆周率pipackage a;/*概率模拟发求圆周率*/public class MyA { public static void main(String[] args) { final int N = 1000 * 1000;//N等于一百万次的实验 int n = 0;//探测落到园内的点的个数 for (int i = 0; i < N; i++) {原创 2014-03-10 19:44:46 · 2931 阅读 · 0 评论 -
博弈树取球博弈问题
package a;/*博弈树取球博弈问题*/public class MyA { // 判定程序,当前剩余球数目=x static boolean f(int x) { int[] op = { 1, 3, 7, 8 }; //逐一判断这4种操作,如果可行就用这种操作 for (int i = 0; i < op.length; i++) { if (x >= op原创 2014-03-10 20:15:39 · 1069 阅读 · 0 评论 -
迷宫问题_按要求操作
小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。比如,可能情形是:**oo***oooo如果同时翻转左边的两个硬币,则变为:oooo***oooo现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?我们约定:把翻动相原创 2014-03-02 20:47:59 · 874 阅读 · 0 评论 -
智能数组
java提供的数组有个特点: 当数组元素的个数确定后,就不能再追加元素了。也就是说,数组的大小在创建的时候就固定了。现在请你来写一个智能数组类 SmartArray,它能够根据需要动态地分配空间。实际上,它只不过是在其它位置分配新的数组,然后把旧的数据拷贝过去。请提供数组访问方法:int get(int idx); // 返回指定位置的元素值void set(int i原创 2014-02-15 00:44:13 · 813 阅读 · 0 评论 -
一般树形结构_求通路长度
如果定义一颗二叉树的高度就是从根到叶子的最长距离。试编码求二叉树的高度。其实,二叉树的高度就是它的左子树和右子树中高度最大值 + 1另外考虑: 当待排序的数据本来就是有序的情况,会发生什么?请参考《数据结构》教材解决这个问题。import java.util.ArrayList;import java.util.List;class MyTree { private L原创 2014-02-15 00:41:47 · 1708 阅读 · 0 评论 -
二叉排序树_求二叉树的高度
如果定义一颗二叉树的高度就是从根到叶子的最长距离。试编码求二叉树的高度。其实,二叉树的高度就是它的左子树和右子树中高度最大值 + 1另外考虑: 当待排序的数据本来就是有序的情况,会发生什么?请参考《数据结构》教材解决这个问题。class BiTree { private int data; private BiTree left; private Bi原创 2014-02-15 00:30:43 · 4345 阅读 · 0 评论 -
队列与栈_栈结构的应用
栈结构很有用处,有时通过它可以轻松化解一些难题。看如下问题:...(.[...)...]...(..(.)..)..{..}.[.]...[[...(.).]..].请判断一个串中的括号是否匹配注意下列不匹配的情况:左括号太多右括号太多右括号先于左括号出现 ..)...(...挎臂情况 ....[...(....]....)....原创 2014-02-15 00:28:14 · 642 阅读 · 0 评论 -
通用菜单_完善功能
为通用控制台菜单完善功能:1. 增加“退出”功能,可以在任意位置放弃选择2. 增加“返回到主菜单”功能,可以在任意深度回到主菜单,而不是逐级向上。3. 为每个叶子节点(就是最终执行命令)增加一个整数信息,将来选择结束时返回这个整数信息,而不是返回叶子节点的字符串。因为不同路径的字符串可能会是相同的内容。import java.util.*;public clas原创 2014-02-15 00:39:12 · 818 阅读 · 0 评论 -
树型选择排序
http://zhouyunan2010.iteye.com/blog/1217462转载 2014-02-22 21:20:30 · 726 阅读 · 1 评论 -
双向循环链表
定义双向循环链表,解决如下的问题:有 n 个孩子顺时针站成一圈,其编号为:1,2,3,... n从1号孩子开始顺时针数数,每个孩子数一个数,遇到7的倍数或数字中含有7,则该孩子不出声,只拍一下手,数数的方向逆转,下一个孩子数下一个数字。例如:1,2,3...6,拍手,则接下来,6号孩子数8,5号孩子数9 ....请模拟该过程,如果有20个孩子,求哪个原创 2014-02-08 22:28:18 · 701 阅读 · 0 评论 -
手写链表(二)-使用内部类实现添加、查询、定位、插入等功能
使用内部类实现添加、查询、定位、插入等功能public class MyList { class Node{ public Node next; public T data; public Node(T data, Node next){ this.data=data; this.next=next; } } private Node head; pri原创 2014-02-01 23:08:43 · 1488 阅读 · 2 评论 -
数组与动态数组_验证步骤
角谷定理说: 任何一个正整数,如果是偶数,则除以2,如果是奇数则乘以3再加1,如此反复,必能最终得到1。这里不要求你证明这个定理,只需要验证10000以内的所有整数哪个经过了最长的步骤,最后才得到1, 并输出这个步骤。比如对9,输出:9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1/* * 角谷定理说: 任何一个正整数,原创 2014-02-15 00:46:37 · 798 阅读 · 0 评论 -
Set接口与应用_推算年龄
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你推算一下,他当时到底有多年轻。/** * 标题: 猜年龄 * 美原创 2014-02-16 13:16:47 · 958 阅读 · 0 评论 -
迷宫问题-深度遍历解法
迷宫问题,深度遍历解法import java.util.HashSet;import java.util.Set;public class Puzzl { private char[][] data; private Pos entry; private Pos exit; private Set solve = new HashSet(); // 找到的解 clas原创 2014-03-02 17:36:34 · 1629 阅读 · 0 评论 -
试探与回溯-差三角问题
/**仔细观察下面的数字组成的三角形: 3 1 45 6 2看出什么特征吗?首先,它包含了1~6的连续整数。重要的是:每个数字都是其下方相邻的两个数字的差(当然是大数减去小数)满足这样特征的三角形,称为:差三角。你的任务是找出1~15的整数组成的一个更大的差三角。其形如: ? 4 ? ? ? ? ? ?原创 2014-03-02 17:14:14 · 1127 阅读 · 2 评论 -
分酒问题_求最大不能组合出的数字
import java.util.Scanner;/*小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。本题的要求就是在已知两个包装的数原创 2014-03-02 21:42:42 · 1726 阅读 · 0 评论 -
分酒问题
import java.util.HashSet;import java.util.Set;class OilStatus { static int[] full = { 12, 8, 5 }; int[] v = new int[3]; OilStatus from; // 从哪个状态来 public OilStatus(int a, int b, int c) { v[0原创 2014-03-02 21:34:38 · 1110 阅读 · 0 评论 -
试探与回溯-八皇后问题
// 8皇后问题public class EightGirl { // 逐一输出每个解 static void show(int[] a) { for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } System.out.println(); } // 对数组放置第k个皇后 sta原创 2014-03-02 16:52:15 · 854 阅读 · 0 评论 -
最短路径-迪杰斯特拉解法-Dijkstra法
/**迪杰斯特拉解法求最短路径*/原创 2014-03-01 17:34:03 · 1286 阅读 · 0 评论 -
广度优先遍历_改造为递归方式
import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;/**第05讲-广度优先遍历_改造为递归方式 * ------------------------------------ * 深度优先遍历的递归相似性很明显。 * 广度优先遍历可以用递归的解法原创 2014-03-01 16:05:30 · 5830 阅读 · 0 评论 -
广度优先遍历-示例
import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;public class Test { public static void main(String[] args) { // 图的邻接表定义 int[][] g = { { 0, 1, 1原创 2014-03-01 15:14:47 · 945 阅读 · 0 评论