JAVA【1024】程序员趣味活动,给定一串数字字符串,保证顺序不变的情况下,加入任意数量个“+“,使其结果等于1024
题目要求:
在数字之间任意添加“+”号,使等式成立=1024,数字的顺序不能改变。
举例:
题目1:512512=1024
答案1:512+512=1024
题目2:256256512=1024
答案2:256+256+512=1024
思路分析:
在给定数字字符串(512512)中随机插入“+”或者“”,(“”的意思是组合多个数字,比如51,512这样子),再通过正则表达式筛选出组合后的字符串中所有的数字(比如:512+512,51+2+5+12),之后计算所有数字的和是否等于给定的结果1024,上述操作不限次数,直到找到正确结果为止。
具体代码实现:
(注意,此方法不包含处理带0的字符串,带0的字符串需要特殊处理,由于本次活动所出题目没有包含0,这里就不处理了)
public class DemoUtil {/*** 计算总和** @param value 数字字符串* @param total 总和**/public static void sum(String value, int total) {System.out.println("Q: " + value + "=" + total);// 随机插入的字符String[] op = {"", "+"};Random random = new Random();// 开始时间戳long startTime = System.currentTimeMillis();// 开始时间戳// 将数字字符串转为单独数字的列表List<String> list = new ArrayList<>(value.length());for (int i = 0; i < value.length(); i++) {list.add(value.substring(i, i + 1));}// 结果集合Set<String> resultSet = new HashSet<>();while (true) {// 总和int sum = 0;StringBuilder sb = new StringBuilder();// 先加入第一个数sb.append(list.get(0));// 之后随机加入符号和数字的组合,例如:可能拼出+1或者12这种for (int i = 1; i < list.size(); i++) {// 注意:如果字符串中包含0,此处需要特殊处理掉+00或者+01这种组合sb.append(op[random.nextInt(op.length)]).append(list.get(i));}// +为出现一次或多次,[0-9]为数字0到9,[0-9]+为匹配出现一次或多次的数字0-9Pattern p = Pattern.compile("[0-9]+");Matcher m = p.matcher(sb.toString());// find()判断是否匹配成功while (m.find()) {// group()是截取结果的子集,相加后的和为sumsum += Integer.parseInt(m.group());}if (sum == total) {resultSet.add(sb.toString());// 这里只取一个结果,如果想取多个结果,修改判断set大小// 但如果预期结果多于实际运算结果,当心程序会陷入死循环 --!if (resultSet.size() == 1) {break;}}}// 打印结果for (String result : resultSet) {System.out.println("A: " + result + "=" + total);}long endTime = System.currentTimeMillis();// 结束时间戳System.out.printf("执行时间为:%dms", (endTime - startTime));}
}
运行结果示例:
public static void main(String[] args) {String value = "512512";int total = 1024;sum(value, total);
}Q: 512512=1024
A: 512+512=1024
执行时间为:2ms
public static void main(String[] args) {String value = "749861737";int total = 1024;sum(value, total);
}Q: 749861737=1024
A: 74+9+861+73+7=1024
执行时间为:5ms
public static void main(String[] args) {String value = "918476872";int total = 1024;sum(value, total);
}Q: 918476872=1024
A: 918+4+7+6+87+2=1024
执行时间为:5ms
JAVA【1024】程序员趣味活动,给定一串数字字符串,保证顺序不变的情况下,加入任意数量个“+“,使其结果等于1024相关推荐
- 1024程序员日:有奖答题,全“猿”狂欢!(无套路,100%中奖)
1024程序员日:有奖答题,全"猿"狂欢! 窗前明月光,疑是影在窗 问君何所在,只为程序忙 身边有这样一个人 作为哥们,你向他借1000块,他会给你1024 还会关心地说一句:拿去 ...
- 1024程序员福利日 | 网易云送暖心礼包,只要你是程序员
有时候,为了彰显重要性,人们会把自己的职业描述得苍翠馥郁,荡气回肠,以使旁人产生一种不知庐山真面目的朦胧之感.比如: 资源管理系统终端信息员: 公司全系统物理安全保障专员: 平面生态理化环境资源整合专 ...
- @Java web程序员,在保留现场,服务不重启的情况下,执行我们的调试代码(JSP 方式)
阅读目录 一.前言 二.问题描述 1.问题代码 2.jsp文件代码 3.执行 jsp 三.总结 回到顶部 一.前言 类加载器实战系列的第六篇(悄悄跟你说,这篇比较水),前面5篇在这里: 实战分析Tom ...
- P8架构师:看源码是Java高级程序员的必经之路
今天笔者在这里给大家介绍一下程序员的内功,内功修炼的内容就与之前文章中的技术内容大致相似,但是,那些技术不是说你想学就能学会的,如果你只是写了几年的业务代码,不对源码加以分析,那么你永远只是停留在码农 ...
- 1024程序员鼓励节来啦!限量手办、机械键盘、独家PDF下载等多重福利等你来!
简介:1024程序员节,开发者社区为各位程序员准备了多种活动,精美礼品.技术干货任你挑选! 为庆祝1024程序员的到来,开发者社区为广大开发者准备了限量手办.机械键盘.2021云栖大会演讲精华PDF文 ...
- Java高级程序员(5年左右)面试的题目集
Java高级程序员(5年左右)面试的题目集 https://blog.csdn.net/fangqun663775/article/details/73614850?utm_source=blogxg ...
- 为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两年经验就敢要1...
为什么80%的码农都做不了架构师?>>> 为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两年经验就敢要10k的薪水? 由于目前国内嵌入 ...
- 如何才能成为java高级程序员?
身为程序员,一旦进入技术行列,就开启了持续学习的道路,更迭迅速的互联网时代,技术自然也是一代一代的更新,在技术进阶的道路上,要不断吸收新的想法和技术知识. 牛逼的人总是让人羡慕,但如何才能让自己成为牛 ...
- 重庆找Java开发工作_重庆【Java开发程序员】
重庆[Java开发程序员],提倡一切为了学员就业的办学思想,教学过程中坚持以练习企业项目为主,让学员真正能学到技术,毕业就能适应工作岗位. 重庆[Java开发程序员], Java 编程开发.而且很多软 ...
最新文章
- Linux安装软件时缺少依赖包的简单较完美解决方法!
- 网站收录上不去估计是这几个方面出了问题
- JavaScript变量——栈内存or堆内存
- 10种常用排序算法实现
- excel取消隐藏_Excel技巧:批量删除隐藏数据及隐藏工作表
- eclipse juno_放弃Eclipse Juno
- c语言用星号输出沙漏,《算法笔记》学习日记——3.3 图形输出
- Windows7+VS2012下OpenGL 4的环境配置
- matlab cuda的.cu文件应该放在那里_无人机基于Matlab/Simulink的模型开发(连载一)
- 时序数据合并场景加速分析和实现 - 复合索引,窗口分组查询加速,变态递归加速...
- 计算机考试题库电子版,全国计算机等级考试一级试题库大全完整版附参考答案...
- 【密码学05】加密模式
- 上海链家网二手房成交数据爬取
- css画钟表_css3实现钟表效果
- Vue脚手架安装与使用
- Unity IOS包在IPhone出现闪退
- 纯净正版 WIN10 安装文件官方下载
- 3D房地产营销PPT模板
- Excel添加下拉按键自动填充颜色
- xp系统 自动锁定计算机,xp如何设置锁屏时间