java算法
中国风2012
我是一个有着浓厚兴趣的人。。。酷爱计算机行业,为计算机事业做贡献,做一个跨时代人物!!
展开
-
自定义方法copy数组 和 Java类库对数组复制的支持
public class Test04_ArrayCopy { // 参数(源数组名,源数级开始点,目标数组名,目标数组开始点,复制的长度) public static void copy(int s[], int s1, int o[], int s2, int len){ for(int i=0; i<len; i++){ o[s2 + i] = s[s1 + i];翻译 2012-04-08 20:49:06 · 1663 阅读 · 1 评论 -
【程序3】该存多少钱 (逆推实例)
import java.text.DecimalFormat;/*【程序3】 * 作者 中国风 * 1.3.3 逆推实例 该存多少钱 * 父亲准备为小龙的四年大学生活一次性储蓄一笔钱, * 使用整存零取的方式,控制小龙每月月底取1000元准备下月使用。 * 假设银行一年整存零取的年息为1.71%,请算出父亲至少需要存入多少钱才行。 * 解题思路: * 若在第原创 2012-12-08 22:35:53 · 2432 阅读 · 1 评论 -
【程序4】填数游戏
/*【程序4】 * 作者 中国风 * 在小学奥数题中经常会看到一些填数字的游戏, * 例如下(图)其中每个汉字代表一个不同的数字, * 要求计算出这些汉字分别代表的是哪一个数字。 * 1.4 枚举(穷举)算法 * 1.4.2 实例:填数游戏 * 算法描述题 x 算 题题题题题题 */public class原创 2012-12-08 22:58:07 · 1410 阅读 · 0 评论 -
【程序6】求阶乘(递归算法)
/*【程序6】 * 作者 中国风 * 使用递归算法计算阶乘 */import java.util.Scanner;public class T006 { public static long fact(long n){ if(n<=1){ System.out.print(n+"="); return 1; }else{ Syste原创 2012-12-08 23:28:55 · 5239 阅读 · 0 评论 -
【程序7】数制转换
/*【程序7】 * 作者 中国风 * 使用递归算法设计数制转换程序。 */import java.util.Scanner;public class T007 { public static void convto(StringBuffer s,int n,int b){ char bit[] = {'0','1','2','3','4','5','6','7'原创 2012-12-08 23:39:11 · 1206 阅读 · 0 评论 -
【程序1】看商品猜价格
实例:看商品猜价格 首先出示一件价格在999元以内的商品,参与者要猜出这件商品的价格。 在猜价格的过程中,主持人会根据参与者给出的价格,相应地给出“高了”或“低了”的提示。 /*【程序1】 * 作者 中国风 * 1.2.2 实例:看商品猜价格 * 首先出示一件价格在999元以内的商品, 参与者要猜出这件商品的价格。 *在原创 2012-12-08 22:28:52 · 1589 阅读 · 0 评论 -
【程序2】兔子繁殖问题
/*【程序2】 * 作者 中国风 * 兔子繁殖问题。设有一对新生的兔子,从第三个月开始他们每个月月初都生一对兔子, * 新生的兔子从第三个月月初开始又每个月生一对兔子。 * 按此规律,并假定兔子没有死亡,n(n<=20)个月月末共有多少个兔子? */import java.util.Scanner;public class T002 { public sta原创 2012-12-08 22:32:25 · 4618 阅读 · 0 评论 -
【程序5】填运算符
/*【程序5】 * 作者 中国风 * 在下面的算式中添加上“+、-、*、/”运算符,使等式成立(不使用括号); * 5 5 5 5 5 = 5 * 1.4 枚举(穷举)算法 * 1.4.3 实例:填运算符 * 由于算术表达式的特殊性,在编程求解这个算式时,需要注意以下几点: 当填入除号时,要求右侧的数不能为0。 乘除的运算级别比加减高。原创 2012-12-08 23:03:43 · 1271 阅读 · 1 评论 -
【程序8】乒乓球比赛赛程安排
/*【程序8】 * 作者 中国风 * 乒乓球比赛赛程安排 * 某学校举行乒乓球比赛,在初赛阶段设置为循环赛,设有n位选手参赛, * 初赛共进行n-1天, 每位选手要与其他每一们选手进行一场比赛, * 然后按积分排名选拔进入决赛的选手。根据学校作息时间, 要求每位 * 选手每天必须比赛一场,不能轮空。按些要求为比赛安排具体日程, * 即决定每天各选手对阵的对手。 *原创 2012-12-10 09:44:13 · 1678 阅读 · 0 评论 -
【程序9】用贪婪算法求找补零钱方案
/*【程序8】 * 实例:换零钱 * 人民币有100、50、10、5、2、1、0.5、0.2、0.1等多种面额(单位为元)。 * 在补零钱时,可有多种方案,例如需补零钱68.90元,至少可有以下方案: * 1张50、1张10、1张5、3张1、1张0.5、2张0.2; * 1张50、1张10、1张5、3张1、1张0.5、4张0.1; * 6张10、1张5、3张1、1张0.5、原创 2012-12-14 10:12:22 · 1606 阅读 · 0 评论 -
【程序10】生成彩票号码组合
/*【程序10】 * 实例:生成彩票号码组合 * 假设有一种彩票,每注由7个1~29的数字组成,且这7个数字不能相同, * 编写程序生成所有的号码组合。 * * 用回溯(试探)算法生成彩票号码所有组合 */public class T010 { public static final int N = 29; // 共N=29个号码 public static原创 2012-12-14 22:38:43 · 5073 阅读 · 0 评论 -
【程序11】猜数游戏
/*【程序11】 * 实例:猜数游戏 * 使用模拟法编写一个猜数游戏,由计算机随机生成一个1~100之内的整数, * 然后由用户来猜这个数,根据用户猜测的次数分别给出不同的提示文字。 */import java.util.Random;import java.util.Scanner;public class T011 { public static void原创 2012-12-15 09:52:50 · 1681 阅读 · 0 评论 -
【程序12】模拟掷骰子游戏
/*【程序12】 * 实例:模拟掷骰子游戏 * 由用户输入骰子数量和参赛人数,然后由计算机随机生成每一粒骰子的数量, * 再累加起来就得到每一个选手的总点数。 */import java.util.Scanner;import java.util.Random;public class T012 { /** * 开始游戏 */ public void原创 2012-12-15 11:17:32 · 6345 阅读 · 1 评论 -
【程序14】亲密数
/*【程序14】 * 实例:亲密数 * 作者 中国风 * 假设有a、b两个数,若a的所有因子之和等于b,b的所有因子之和等于a, * 并且a不等于b,则称a和b是一对亲密数。如284和220就是一对亲密数。 * * 分析: 若要找出10000以内的亲密数,可使用以下算法: (1)对每一个数i,将其因子分解出来,并将因子保存到一个数组中,再将原创 2012-12-20 22:52:42 · 3442 阅读 · 3 评论 -
【程序13】求10000以内的所有完数
/*【程序13】 * 实例:求10000以内的所有完数 * 作者 中国风 * 如果一个数恰好等于其因子之和,这个数就称为完数。 * * 分析: * 求10000以内的所有完数的过程:(1)则用n去除以1~(n/2+1)之间的所有整数,将能整除的被除数保存到一个数组中,作为n的一个因子。(2)用数sum=0 依次加上每个因子,最终判断sum是否正好等于n。(3原创 2012-12-18 12:34:07 · 11302 阅读 · 0 评论 -
最近距离 已知平面上的若干点的位置,存入一个List中。现在需要计算所有这些点中, 距离最近的两个点间的最小距离。请补全缺失的代码。
import java.util.ArrayList;import java.util.List;/* * 最近距离 已知平面上的若干点的位置,存入一个List中。现在需要计算所有这些点中, 距离最近的两个点间的最小距离。请补全缺失的代码。 把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。*/class MyPoint{ privat原创 2013-03-29 17:21:10 · 2033 阅读 · 0 评论 -
基因牛 张教授采用基因干预技术成功培养出一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛。
/* * 基因牛 张教授采用基因干预技术成功培养出一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛。如此循环下去,请问张教授n年后有多少头母牛? 以下程序模拟了这个过程,请填写缺失的代码。 */import java.util.ArrayList;import java.util.List;class Cow{ private int原创 2013-03-29 18:03:45 · 4570 阅读 · 3 评论 -
圆周率 我国古代数学家对圆周率方面的研究工作,成绩是突出的。三国时期的刘徽、南北朝时期的祖冲之都在这个领域取得过辉煌战绩。
/* * 圆周率 我国古代数学家对圆周率方面的研究工作,成绩是突出的。三国时期的刘徽、南北朝时期的祖冲之都在这个领域取得过辉煌战绩。 有了计算机,圆周率的计算变得十分容易了。如今,人们创造了上百种方法求π的值。其中比较常用且易于编程的是无穷级数法。 π/4 = 1 – 1/3 + 1/5 – 1/7 + 1/9 - … 是初学者特别喜欢的一个级数形式,但其缺点是收敛太慢。 π/2 =原创 2013-03-28 22:27:11 · 4544 阅读 · 0 评论 -
孪生素数 所谓孪生素数指的就是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了
/*孪生素数所谓孪生素数指的就是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了,就象孪生兄弟一样。最小的孪生素数是 (3, 5),在 100 以内的孪生素数还有 (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61) 和 (71, 73),总计有 8 组。 但是随着数字的增大,孪生素数的分布变得越来越稀疏,寻找孪生素数原创 2013-03-28 22:29:01 · 6108 阅读 · 0 评论 -
字符串反转
/* * 反转串 我们把“cba”称为“abc”的反转串。 求一个串的反转串的方法很多。下面就是其中的一种方法,代码十分简洁(甚至有些神秘), 请聪明的你通过给出的一点点线索补充缺少的代码。 把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。 */public class Demo03 { public static String reve原创 2013-03-29 16:29:55 · 1007 阅读 · 0 评论 -
数字黑洞:任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到 * 一个最大的数:65432,一个最小的数23456。
/* * 任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到 * 一个最大的数:65432,一个最小的数23456。 * 求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。 * 如此往复,数字会落入某个循环圈(称为数字黑洞)。 比如,刚才的数字会落入:[82962,75933, 63954, 61974]这个循环圈。 请编写原创 2013-03-31 14:42:27 · 11152 阅读 · 2 评论 -
迷宫问题 对于走迷宫,人们提出过很多计算机上的解法。深度优先搜索、广度优先搜索是使用最广的方法。
/*迷宫问题对于走迷宫,人们提出过很多计算机上的解法。深度优先搜索、广度优先搜索是使用最广的方法。生活中,人们更愿意使用“紧贴墙壁,靠右行走”的简单规则。下面的代码则采用了另一种不同的解法。它把走迷宫的过程比做“染色过程”。假设入口点被染为红色,它的颜色会“传染”给与它相邻的可走的单元。这个过程不断进行下去,如果最终出口点被染色,则迷宫有解。仔细分析代码中的逻辑,填充缺少的部分。把原创 2013-04-01 08:29:01 · 2715 阅读 · 0 评论 -
在中文Windows环境下,控制台窗口中也可以用特殊符号拼出漂亮的表格来。
/* * 在中文Windows环境下,控制台窗口中也可以用特殊符号拼出漂亮的表格来。比如: ┌─┬─┐ │ │ │ ├─┼─┤ │ │ │ └─┴─┘ 其实,它是由如下的符号拼接的: 左上 = ┌ 上 = ┬ 右上 = ┐ 左 = ├ 中心 = ┼ 右 = ┤ 左下= └ 下 = ┴ 右下 = ┘ 垂直 = │ 水平 = ─本题目原创 2013-04-01 09:43:03 · 5321 阅读 · 0 评论 -
某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某1笔或几笔。 如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗?
/* * 某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某1笔或几笔。 * 如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? * 如果有多种可能,则输出所有可能的情况。 * 我们规定:用户输入的第一行是:有错的总金额。 * 接下来是一个整数n,表示下面将要输入的明细账目的条数。 * 再接下来是n行整数,分别表示每笔账目的金额。 * * 要求程序输出:所有可能原创 2013-04-01 14:03:40 · 2769 阅读 · 0 评论 -
一种Playfair密码变种加密方法如下:首先选择一个密钥单词(称为pair)(字母不重复,且都为小写字母),然后与字母表中其他字母一起填入至一个5x5的方阵中,填入方法如下:
/* * 一种Playfair密码变种加密方法如下:首先选择一个密钥单词(称为pair)(字母不重复,且都为小写字母), * 然后与字母表中其他字母一起填入至一个5x5的方阵中,填入方法如下:1.首先按行填入密钥串。2.紧接其后,按字母序按行填入不在密钥串中的字母。3.由于方阵中只有25个位置,最后剩下的那个字母则不需变换。如果密钥为youandme,则该方阵如下:原创 2013-04-01 21:15:13 · 5894 阅读 · 0 评论 -
从键盘输入一个整数(1~20) 则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。
/* * 从键盘输入一个整数(1~20) 则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如: 输入数字2,则程序输出: 1 2 4 3 输入数字3,则程序输出: 1 2 3 8 9 4 7 6 5 输入数字4, 则程序输出: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7原创 2013-04-02 21:11:08 · 13276 阅读 · 0 评论 -
从键盘输入一个日期,格式为yyyy-M-d 要求计算该日期与1949年10月1日距离多少天
/* * 从键盘输入一个日期,格式为yyyy-M-d 要求计算该日期与1949年10月1日距离多少天 例如: 用户输入了:1949-10-2 程序输出:1 用户输入了:1949-11-1 程序输出:31*/import java.util.Arrays;import java.util.Scanner;public class Demo09 { static int[][]原创 2013-04-03 10:56:48 · 10331 阅读 · 0 评论 -
字符串全排列
/* * 字符串全拜列 */public class T03{ // 输出字符数组 public static void print(char[] arr){ for(int i=0;i<arr.length;i++){ System.out.print(arr[i]); } System.out.println(); } // 递归遍历原创 2013-03-21 20:17:20 · 1183 阅读 · 0 评论 -
当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心, 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
/* * 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心, * 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。 该校验的过程:1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。3、将奇数位总和加上偶数位总和,结果应该原创 2013-04-07 07:19:25 · 5078 阅读 · 1 评论 -
微生物增殖 假设有两种微生物 X 和 Y,X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y.
/* * 微生物增殖 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。 现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。 如果X=10,Y=90 呢? 本题的要求就是写出这两种初始条件下,60分钟后Y原创 2013-04-07 10:40:16 · 8453 阅读 · 1 评论 -
把一个方阵顺时针旋转。
/* * 转方阵对一个方阵转置,就是把原来的行号变列号,原来的列号变行号 例如,如下的方阵: 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16 转置后变为: 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 但,如果是对该方阵顺时针旋转(不是转置),却是如下结果:13 9原创 2013-04-07 17:07:06 · 2739 阅读 · 1 评论 -
已知平面上若干个点的坐标。需要求出在所有的组合中,4个点间平均距离的最小值(四舍五入,保留2位小数)。
/* * 已知平面上若干个点的坐标。 需要求出在所有的组合中,4个点间平均距离的最小值(四舍五入,保留2位小数)。 比如有4个点:a,b,c,d,则平均距离是指:ab, ac, ad, bc, bd, cd 这6个距离的平均值。 每个点的坐标表示为:横坐标,纵坐标 坐标的取值范围是:1~1000 所有点的坐标记录在in.txt中,请读入该文件,然后计算。翻译 2013-03-24 18:24:55 · 3480 阅读 · 0 评论 -
黄金分割数0.618与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的0.618处
import java.math.BigDecimal;/* * 黄金分割数0.618与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的0.618处, 墙上的画像一般也挂在房间高度的0.618处,甚至股票的波动据说也能找到0.618的影子.... 黄金分割数是个无理数,也就是无法表示为两个整数的比值。 0.618只是它的近似值,其真值可以通过对5开方原创 2013-03-24 19:15:13 · 4126 阅读 · 0 评论 -
递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列
package temp;/** * 递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列 * * @param datas * @param target */ import java.util.Arrays;import java.util.List;import java.util.ArrayList;public class T06 {原创 2013-03-22 13:38:44 · 1866 阅读 · 0 评论 -
古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA
/* * 古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也是!” 于是,两人沉默了好久,还是没有算出合适的结果来。 请你利用计算机的优势,找到破解的答案。 把 ABCDE 所代表的数字写出来。 答案写在原创 2013-04-07 16:16:20 · 9739 阅读 · 0 评论 -
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
import java.math.BigInteger;/* * 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上(可以借助第三根柱子做缓冲)。 并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动原创 2013-03-25 09:36:02 · 16018 阅读 · 0 评论 -
把串s中第一个出现的数字的值返回。如果找不到数字,返回-1
/* 以下的静态方法实现了:把串s中第一个出现的数字的值返回。 如果找不到数字,返回-1 例如: s = "abc24us43" 则返回2 s = "82445adb5" 则返回8 s = "ab" 则返回-1 */public class Demo09_FirstNum { public static int getFirstNum(String s) { if原创 2013-03-25 11:39:56 · 1903 阅读 · 0 评论 -
密码发生器 在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全;如果设置不好记的密码,又担心自己也会忘记;如果写在纸上,担心纸张被别人发现或
/* * 密码发生器 在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧, 容易被破解,不安全;如果设置不好记的密码,又担心自己也会忘记;如果写在纸上,担心纸张被别人发现或弄丢了... 这个程序的任务就是把一串拼音字母转换为6位数字(密码)。 我们可以使用任何好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序原创 2013-04-07 19:59:28 · 4017 阅读 · 0 评论 -
取球游戏 今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个, 也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。
/* * 取球游戏 今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个, 也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。 我们约定: 每个人从盒子中取出的球的数目必须是:1,3,7或者8个。 轮到某一方取球时不能弃权! A先取球,然后双方交替取球,直到取完。 被迫拿到最后一个球的一方为负方(输方) 请编程确定出在双方都不判断失误原创 2013-04-07 22:30:24 · 8820 阅读 · 2 评论 -
[12,127,85,66,27,34,15,344,156,344,29,47,....] 这是某设备测量到的工程数据。 因工程要求,需要找出最大的5个值。
/* [12,127,85,66,27,34,15,344,156,344,29,47,....] 这是某设备测量到的工程数据。 因工程要求,需要找出最大的5个值。 一般的想法是对它排序,输出前5个。但当数据较多时,这样做很浪费时间。 因为对输出数据以外的数据进行排序并非工程要求,即便是要输出的5个数字, 也并不要求按大小顺序,只要找到5个就可以。 以下的代码采用了另外的思路。考原创 2013-03-25 18:37:31 · 2746 阅读 · 5 评论