为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Java由浅入深解决一道数字组合题的方案

2012-10-20 3页 pdf 199KB 20阅读

用户头像

is_607706

暂无简介

举报
Java由浅入深解决一道数字组合题的方案 ⋯ 【_ , ⋯ ‘ } 实用第一 /智慧密集 ⋯ ⋯ 一 ⋯ ⋯ ⋯ ⋯ 一 Java由浅入溶解决一道熬警组合蘑 案 朱成军 ●⋯ _ 摘 要 : 发 之 美。 关键词 : 对数字组合题本身进行要点分析,通过 4种不同的程序风格由浅入深地介绍Java程序开 Java由浅入深;Java API;正则表达式;数字组合 1 题目与分析 1.1 题 目 一 道数字组合题要求 :9个数字 l一9组成 3个数 ,如 : 327 654 981.每个数字只能用一次,每3...
Java由浅入深解决一道数字组合题的方案
⋯ 【_ , ⋯ ‘ } 实用第一 /智慧密集 ⋯ ⋯ 一 ⋯ ⋯ ⋯ ⋯ 一 Java由浅入溶解决一道熬警组合蘑 案 朱成军 ●⋯ _ 摘 要 : 发 之 美。 关键词 : 对数字组合本身进行要点,通过 4种不同的程序风格由浅入深地介绍Java程序开 Java由浅入深;Java API;正则达式;数字组合 1 题目与分析 1.1 题 目 一 道数字组合题要求 :9个数字 l一9组成 3个数 ,如 : 327 654 981.每个数字只能用一次,每3个数字组成一个组的 数字;第二组数字是第一组数字的两倍 ;第 3组数字是第一组 数字 的 3倍 .用程序实现 。 1.2 要点分析 根据题 目要求进行要点分析 : (1)9个数字 1-9组成 3个数 :三组数字 中不能能包含 0。 (2)每个数字只能用一次:可以推算出3组数字中最大一 组数字的值不能超过987,最小一组数字的值不能小于 123。 (3)每 3个数字组成一个组的数字,第二组数字是第一组 数字的两倍,第二三组数字是第一组数字的3倍:由3组数字之 间的关系可以推断出第一组数字为最小,且最小值为 123,由 第i组数字是第一组数字的3倍可以将第一组数字最大值定位 在 333.义因为第二个要点决定了第一组数字的第二位只能是 2.不难得出第一组数字的第三位最大就是 9了。由此推出第 一 组数字的最大值为 329,最小值为 123。 (4)第二组数字是第一组数字的两倍 ,第三组数字是第一 组数字的 3倍 :根据相互关系很快能够得到第二组数字和第三 组数字。同时结合第二点分析进行结果排重后得到正确结果。 2 算法与描述 根据 1.2的要点分析 Java类基本结构已经呈现出来 了,类 中最 多需要 2个方 法: (1)校验:用于数字排重和排除三组数字中包含0的 结果 。 (2)3组数字产生方法:产生的3组数字进行组合进行校 验,符合的就是目标结果。 类中第一个基本校验方法貌似公用的,这里给出命名为 vaildRepeat(String str),由 函数 名可 知有重 复 的返 回为 true, 否则返回为false。 2012.01 电■11程技巧与 壤 这个方法输入参数为一个字符 串,该字符 串可 以是第一组 数字、第一 、第二组数字组合或者是第一、第二、第三组数字 组合的一个字符串。所以方法体定义为如下: public static Boolean va ldRepeat(Str{ng str) { Boolean flag=false; return flag; ) 校验方法第一步就是检查方法输入参数 中是否包含 0,如 果包含 0立刻返 回一个 true,一行 代码 :if(str.indexOf(”0”) >0) {retum true;} 方法第二步就是检查数字 l到9在输人参数中出现的次数, 因为题 目中已经限制了数字只能出现一次,所以只要统计这 9 个数字在字符串中出现 的次数就可 以了。很明显每个数字统计 结果只能是 O和 1。所以在类初始位置定义了 2个 final类型的 静态常量,静态常量的修改可以帮助解决本题目后续延伸问题。 private static final int MAX DISPLAY — CNT=1://数字统 //计最大出现次数 private static final String 【】NBR—STR_ARR={ 1 ,”2”.“3“,“ 4“,”5 , 6 , 7”,”8“,“9 } //枚举出所有可能出现的数字作为一个常量 //数组,用于后续统计每个数字出现次数; 统计这 9个数字在字符串中出现的次数相信不是件难事 , 下面按照对 Java编程熟悉程度不同给出4种不同的程序描述。 2.1 入 门级代码 入门级代码主要是分别生成 3组数字,因为第一组数字 的范围已经可 以确定了 ,所 以循环 的起始 和终止也就有 ,代码 如下 : for(int i=123:i<:329:i++)∥注意中间是小于等于 入门级代码中需要分别产生出 3组数字 ,由于每组数字 是一个不定长的数组,在方法的起始的地方定义了 2个 Ar- rayList数组 .分别为 firstList、seeList,分别用于存储符合条件 的第一组数字和第二组数字。 第一组数字要求在 123到 330之间的所有符合前 3位不 重复且不含0的数字组合,符合条件的存人到firstList。 第二组数字是在 firstList的范围中 2,转换成字符串后和 一 ⋯ PROGRAM LANGUAGE ~ ⋯ ⋯ 一⋯ ⋯ ⋯ m ⋯⋯ ⋯ 第一组数字进行拼接成一个字符串,调用 vaildRepeat()方 public static void fun20{ 法,返回值为蹦se的存人到secList。 StringButfer newStr null; 第三组数字在secust列表范围中的数字除以2,然后乘以 fo (;nt i=’2 <=329 +: ,、 3,除法结果拼接 secList记录然后再拼接乘 以 3的结果转化成字 newStr .append(i).app end(i*2 ppend(i*3): 符串,调用 vaildRepeat()方法返回值为false的记录就是结果。 if(!v dRepeat(newstr.toString0)){ fun1代码如下 : System.out.println(”Fun2:”+i+ ,”+i 2+“,”+i 3) public static void fun 1 0{ ) ArrayList firstList:new ArrayList0,secList:neW ArrayList0: } StringBu什er newStr=new StringBuffer0 } int vl=0,v2=0.v3=0;//9~JJ存储第一、第二、 2.3 运用 Java API代码 ,/第三个数字组合 ∥第一步找出前三位不重复的数子组合 for《int i=123;i<=329;i++){//数值分析 最大值 为 329,最小值为 123 if(!vajldRepeat(Str1ng.valueOf(i))){ firstList.add(String.valueOf(i)); ) ) ∥第二步在第一步基础上对第一步结果进行 2,并 //进行不重复验证 for(int i=0;i方案
,运行效率 不断提升。从 4种方案让人感受到了 Java程序开发之美。但 是由此题进行延伸的话,将题 目中的每个数字只能用~次改为 每个数字只能用 N次 ,N在 1到 9之间。 (收稿 日期 :2011-08—18) (上接第4l贞) 参考文献 【11 王晟.Visual C#.NET数据库开发经典案例解析.清华大学 出版社 .2005. 144 20确12囊. 01远与雏iiii 【2]Glenn JohnSon.ADO.NET 2.0高级编程.清华大学出版社, 2006. [3】3 Microsoft Visual Studio 2005 Documentation. (收稿 日期:2011—08一O9)
/
本文档为【Java由浅入深解决一道数字组合题的方案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索