免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
import java.math.BigInteger;import java.util.Hashtable;public class Main private static final int SIZE = 21; private int countArray = new int10; / 个数列表 private int countSumArray = new int10; / 个数总数 private BigInteger sumArray = new BigInteger10;/ 值总数 private int offset = 0;/ 浮标 /* * 设置当前浮标对应的个数,个数的总数,值总数 * * param num * 个数 */ private void setValue(int num) countArrayoffset = num; if (offset = 0) countSumArrayoffset = num; sumArrayoffset = p(9 - offset).multiply(n(num); else countSumArrayoffset = countSumArrayoffset - 1 + num; sumArrayoffset = sumArrayoffset - 1.add(p(9 - offset).multiply(n(num); /* * 检验当前数据是否匹配 * * return */ private boolean checkPersentArray() BigInteger minVal = sumArrayoffset;/ 当前已存在值 BigInteger maxVal = sumArrayoffset.add(p(9 - offset).multiply(n(SIZE - countSumArrayoffset);/ 当前已存在值+可能存在的最大值 / 最小值匹配 if (minVpareTo(MAX) 0) return false; / 最大值匹配 if (maxVpareTo(MIN) 0 ? minVal.toString() : MIN.toString(); String maxStr = maxVpareTo(MAX) 0 ? maxVal.toString() : MAX.toString(); / 找到最小值与最大值间首部相同的部分 int sameCountArray = new int10; for (int i = 0; i SIZE; i+) char c; if (c = minStr.charAt(i) = maxStr.charAt(i) sameCountArrayc - 0 = sameCountArrayc - 0 + 1; else break; / 判断如果相同部分有数据大于现在已记录的位数,返回false for (int i = 0; i = offset; i+) if (countArrayi sameCountArray9 - i) return false; / 如果当前值的总数为SIZE位,那么判断该值是不是需要查找的值 if (countSumArrayoffset = SIZE) String sumStr = sumArrayoffset.toString(); BigInteger sum = ZERO; for (int i = 0; i 0) offset-; else return true; if (offset 0) setValue(countArrayoffset - 1); return false; else return true; /* * 测试程序 * * param startValue * 测试匹配数中包含9的个数 * param startTime * 程序启动时间 */ private void test(int startValue, long startTime) / 设置9的个数 offset = 0; setValue(startValue); while (true) if (checkPersentArray() / 检查当前提交数据是否匹配 / 匹配且总数正好为SIZE的位数,那么就是求解的值 if (countSumArrayoffset = SIZE) success(); / 总数不为SIZE,且当前值不在第10位(即不等于0) if (offset != 9) next(); continue; / 总数不为SIZE,且当前值在第10位。 if (back() break; else if (back() break; System.out.println(Thread.currentThread() + End,Spend time + (System.currentTimeMillis() - startTime) / 1000 + s); /* * 主函数 */ public static void main(String args) final long startTime = System.currentTimeMillis(); int s = SIZE 9 ? 9 : SIZE; for (int i = 0; i = s; i+) / new Main().test(i, startTime); / 启动十个线程同时运算 final int startValue = i; new Thread(new Runnable() public void run() new Main().test(startValue, startTime); ).start(); private static final BigInteger ZERO = new BigInteger(0); private static final BigInteger MIN; private static final BigInteger MAX; /* * 0-SIZE间的BigInteger */ private static final BigInteger n(int i) return (BigInteger) ht.get(n_ + i); /* * 0-9的次方的BigInteger */ private static final BigInteger p(int i) return (BigInteger) ht.get(p_ + i); /* * 用于缓存BigInteger数据,并初始化0-SIZE间的BigInteger和0-9的次方的BigInteger */ private static Hashtable ht = new Hashtable(); static int s = SIZE 10 ? 10 : SIZE; for (int i = 0; i = s; i+) ht.put(n_ + i, new BigInteger(String.valueO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026征信查询考试题库及答案
- 2026年秋季学期全国高校物理期末考试试卷及答案解析
- 2026年北师大版初二语文上册第四单元拔高模拟试卷及答案
- 2026消毒方法试题及答案
- 2026注册验船师考试(C级船舶检验专业综合能力)能力提高训练题及答案二
- 陕西水务发展建设集团招聘笔试题库及答案2026
- 2026年化妆品管理与法规知识考试题库(含答案)
- 测绘工程项目招投标管理专项习题集
- 2022-2023七年级上册地理第三单元第三章试卷及答案人教版
- 2026年国家能源集团低碳院人员招聘笔试备考试题及详细答案解析
- 国有企业领导人员廉洁从业规定知识测试题及答案
- 2026年4月自考02324离散数学试题及答案含评分参考
- 材料物理知到智慧树章节测试课后答案2024年秋南开大学
- 第一章地球的运动(易考易错单元卷)(解析版)
- DL∕T 1917-2018 电力用户业扩报装技术规范
- 2024年1月自考07484社会保障学试题及答案含解析
- 医疗废弃物无害化处理与资源化利用
- 《运动技能学习与控制》考试复习题库(含答案)
- 露天采矿技术管理
- 内部控制评价与审计案例研究-11-24
- (最准确)工程勘察设计收费标准快速计算表(EXCEL)
评论
0/150
提交评论