题目要求:

在数字之间任意添加“+”号,使等式成立=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相关推荐

  1. 1024程序员日:有奖答题,全“猿”狂欢!(无套路,100%中奖)

    1024程序员日:有奖答题,全"猿"狂欢! 窗前明月光,疑是影在窗 问君何所在,只为程序忙 身边有这样一个人 作为哥们,你向他借1000块,他会给你1024 还会关心地说一句:拿去 ...

  2. 1024程序员福利日 | 网易云送暖心礼包,只要你是程序员

    有时候,为了彰显重要性,人们会把自己的职业描述得苍翠馥郁,荡气回肠,以使旁人产生一种不知庐山真面目的朦胧之感.比如: 资源管理系统终端信息员: 公司全系统物理安全保障专员: 平面生态理化环境资源整合专 ...

  3. @Java web程序员,在保留现场,服务不重启的情况下,执行我们的调试代码(JSP 方式)

    阅读目录 一.前言 二.问题描述 1.问题代码 2.jsp文件代码 3.执行 jsp 三.总结 回到顶部 一.前言 类加载器实战系列的第六篇(悄悄跟你说,这篇比较水),前面5篇在这里: 实战分析Tom ...

  4. P8架构师:看源码是Java高级程序员的必经之路

    今天笔者在这里给大家介绍一下程序员的内功,内功修炼的内容就与之前文章中的技术内容大致相似,但是,那些技术不是说你想学就能学会的,如果你只是写了几年的业务代码,不对源码加以分析,那么你永远只是停留在码农 ...

  5. 1024程序员鼓励节来啦!限量手办、机械键盘、独家PDF下载等多重福利等你来!

    简介:1024程序员节,开发者社区为各位程序员准备了多种活动,精美礼品.技术干货任你挑选! 为庆祝1024程序员的到来,开发者社区为广大开发者准备了限量手办.机械键盘.2021云栖大会演讲精华PDF文 ...

  6. Java高级程序员(5年左右)面试的题目集

    Java高级程序员(5年左右)面试的题目集 https://blog.csdn.net/fangqun663775/article/details/73614850?utm_source=blogxg ...

  7. 为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两年经验就敢要1...

    为什么80%的码农都做不了架构师?>>>    为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两年经验就敢要10k的薪水?   由于目前国内嵌入 ...

  8. 如何才能成为java高级程序员?

    身为程序员,一旦进入技术行列,就开启了持续学习的道路,更迭迅速的互联网时代,技术自然也是一代一代的更新,在技术进阶的道路上,要不断吸收新的想法和技术知识. 牛逼的人总是让人羡慕,但如何才能让自己成为牛 ...

  9. 重庆找Java开发工作_重庆【Java开发程序员】

    重庆[Java开发程序员],提倡一切为了学员就业的办学思想,教学过程中坚持以练习企业项目为主,让学员真正能学到技术,毕业就能适应工作岗位. 重庆[Java开发程序员], Java 编程开发.而且很多软 ...

最新文章

  1. Linux安装软件时缺少依赖包的简单较完美解决方法!
  2. 网站收录上不去估计是这几个方面出了问题
  3. JavaScript变量——栈内存or堆内存
  4. 10种常用排序算法实现
  5. excel取消隐藏_Excel技巧:批量删除隐藏数据及隐藏工作表
  6. eclipse juno_放弃Eclipse Juno
  7. c语言用星号输出沙漏,《算法笔记》学习日记——3.3 图形输出
  8. Windows7+VS2012下OpenGL 4的环境配置
  9. matlab cuda的.cu文件应该放在那里_无人机基于Matlab/Simulink的模型开发(连载一)
  10. 时序数据合并场景加速分析和实现 - 复合索引,窗口分组查询加速,变态递归加速...
  11. 计算机考试题库电子版,全国计算机等级考试一级试题库大全完整版附参考答案...
  12. 【密码学05】加密模式
  13. 上海链家网二手房成交数据爬取
  14. css画钟表_css3实现钟表效果
  15. Vue脚手架安装与使用
  16. Unity IOS包在IPhone出现闪退
  17. 纯净正版 WIN10 安装文件官方下载
  18. 3D房地产营销PPT模板
  19. Excel添加下拉按键自动填充颜色
  20. xp系统 自动锁定计算机,xp如何设置锁屏时间

热门文章

  1. 抖音爬虫挑战一------------模拟器安装
  2. 《算法导论》第三章 函数的增长 个人心得——记号与常用函数
  3. ar数字展厅互动设计的功能及优势
  4. 短视频上热门必须要学会这100个爆款标题模版
  5. [javascript] js websocket断线重连库ReconnectingWebSocket
  6. 路由器漏洞挖掘(栈,危险函数,方法)
  7. Linux命令中timedatectl、weget的使用以及如何创建目录
  8. 巡检机器人迎来新风口,助力打造轨交安全高效新模式
  9. STM32F103VET6实现呼吸灯
  10. 【理论分析】理解SVPWM技术