第五题(15分)
题目描述
  实验室的王大神设计的机器人“学霸”掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等。经过训练,Dr.Kong设计的机器人卡多甚至会计算一种嵌套的更复杂的表达式。
  假设表达式可以简单定义为:
  1. 一个正的十进制数 x 是一个表达式。
  2. 如果 x 和 y 是 表达式,则 函数min(x,y)也是表达式,其值为x,y 中的最小数。
  3. 如果 x 和 y 是 表达式,则 函数max(x,y)也是表达式,其值为x,y 中的最大数。
  4.如果 x 和 y 是 表达式,则 函数add(x,y)也是表达式,其值为x,y 之和。
  例如, 表达式 max(add(1,2),7) 的值为 7。
  请你编写程序,对于给定的一组表达式,帮助 Dr.Kong 算出正确答案,以便校对卡多计算的正误。

输入格式

  第一行: N 表示要计算的表达式个数 (1≤ N ≤ 10)
  接下来有N行, 每行是一个字符串,表示待求值的表达式
  (表达式中不会有多余的空格,每行不超过300个字符,表达式中出现的十进制数都不
  超过1000。)

输出格式

  输出有N行,每一行对应一个表达式的值。

样例输入

3
add(1,2)
max(1,999)
add(min(1,1000),add(100,99))

样例输出

3
999
200

解题思路:

由于存在嵌套语句,可以每算出一层嵌套就将答案与嵌套语句做替换,当最后字符串中只有数字字符时便是最终答案。注意在判断完一层都需要退回开头重新计算。由于求解三个表达式的过程相同,所以该程序存在冗余语句。

java代码:

import java.io.*;public class Main {public static void main(String[] args) throws NumberFormatException, IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int n = Integer.parseInt(br.readLine());String []str = new String[n];for(int i = 0;i < n;i++) {str[i] = br.readLine();}for(int i = 0; i < n;i++) {int j = 0,l = 0,r = 0;StringBuilder builder = null;while(true) {int f;boolean flag = true;for(f = 0; f < str[i].length() ;f++) {//判断是否还有嵌套语句if(!Character.isDigit(str[i].charAt(f)))break;}if(f == str[i].length()) {break;}char t = str[i].charAt(j);if(t == 'a') {l = j;j = j + 4;//跳过语句“(add”,正好四个字符if(!Character.isDigit(str[i].charAt(j))) {//内层有嵌套,重新判断continue;}builder = new StringBuilder();while(Character.isDigit(str[i].charAt(j))) {//拼接整数builder.append(str[i].charAt(j));j++;}int a = Integer.parseInt(builder.toString());j++;//跳过逗号builder = new StringBuilder();while(Character.isDigit(str[i].charAt(j))) {builder.append(str[i].charAt(j));j++;flag = false;}r = j;if(flag) {//逗号后仍有嵌套continue;}int b = Integer.parseInt(builder.toString());String sum = a + b + "";builder = new StringBuilder(str[i]);builder.delete(l, r + 1);//删除原嵌套语句builder.insert(l, sum);//换成运算结果str[i] = builder.toString();j = 0;//退回开始}else if(t == 'm' && str[i].charAt(j + 1) == 'a') {l = j;j = j + 4;if(!Character.isDigit(str[i].charAt(j))) {continue;}builder = new StringBuilder();while(Character.isDigit(str[i].charAt(j))) {builder.append(str[i].charAt(j));j++;}int a = Integer.parseInt(builder.toString());j++;builder = new StringBuilder();while(Character.isDigit(str[i].charAt(j))) {builder.append(str[i].charAt(j));j++;flag = false;}r = j;if(flag) {continue;}int b = Integer.parseInt(builder.toString());String sum = (a > b ? a : b) + "";builder = new StringBuilder(str[i]);builder.delete(l, r + 1);builder.insert(l, sum);str[i] = builder.toString();j = 0;}else if(t == 'm' && str[i].charAt(j + 1) == 'i') {l = j;j = j + 4;if(!Character.isDigit(str[i].charAt(j))) {continue;}builder = new StringBuilder();while(Character.isDigit(str[i].charAt(j))) {builder.append(str[i].charAt(j));j++;}int a = Integer.parseInt(builder.toString());j++;builder = new StringBuilder();while(Character.isDigit(str[i].charAt(j))) {builder.append(str[i].charAt(j));j++;flag = false;}r = j;if(flag) {continue;}int b = Integer.parseInt(builder.toString());String sum = (a > b ? b : a) + "";builder = new StringBuilder(str[i]);builder.delete(l, r + 1);builder.insert(l, sum);str[i] = builder.toString();j = 0;}else {j++;}}}for(String s : str) {System.out.println(s);}}
}

提交截图:

算法提高 第五题 java 题解 1096相关推荐

  1. java 蓝桥杯算法提高 身份证号码升级(题解)

    试题 算法提高 身份证号码升级 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 从1999年10月1日开始,公民身份证号码由15位数字增至18位.(18位身份证号码简介).升级方法为 ...

  2. 算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负 ...

  3. 算法提高 质因数2(java)

    算法提高 质因数2 描述 将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出.最后输出质因数的个数. 输入 输入描述: 一行,一个正整数 输入样例: 66 输出 ...

  4. 算法提高 理财计划(java)

    算法提高 理财计划 描述 银行近期推出了一款新的理财计划"重复计息储蓄".储户只需在每个月月初存入固定金额的现金,银行就会在每个月月底根据储户账户内的金额算出该月的利息并将利息存入 ...

  5. [Java] 蓝桥杯ADV-155 算法提高 上帝造题五分钟

    问题描述 第一分钟,上帝说:要有题.于是就有了L,Y,M,C 第二分钟,LYC说:要有向量.于是就有了长度为n写满随机整数的向量 第三分钟,YUHCH说:要有查询.于是就有了Q个查询,查询向量的一段区 ...

  6. 蓝桥杯 ADV-155 算法提高 上帝造题五分钟

    问题描述 第一分钟,上帝说:要有题.于是就有了L,Y,M,C 第二分钟,LYC说:要有向量.于是就有了长度为n写满随机整数的向量 第三分钟,YUHCH说:要有查询.于是就有了Q个查询,查询向量的一段区 ...

  7. 色盲java_[蓝桥杯][算法提高VIP]色盲的民主-题解(Java代码)

    解题思路: 注意事项: 参考代码: import java.util.ArrayList; import java.util.Collections; import java.util.HashMap ...

  8. 算法——AcWing算法提高课中代码和题解

    文章目录 第一章 动态规划 (完成情况:64/68) 数字三角形模型 最长上升子序列模型 背包模型 状态机模型 状态压缩DP 区间DP 树形DP 数位DP 单调队列优化DP 斜率优化DP 第二章 搜索 ...

  9. 算法训练 JAM计数法 java 题解

    资源限制 时间限制:1.0s   内存限制:256.0MB 问题描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数 ...

最新文章

  1. 树莓派安装CentOS
  2. String实例化两种方式的区别
  3. hdu 4974 贪心
  4. CoreAnimation编程指南(简介)转自:http://www.dreamingwish.com/
  5. Wi-Fi Direct
  6. 【优化算法】金鹰优化算法(GEO)【含Matlab源码 187期】
  7. Android常用组件,太全了
  8. Java实现多种格式上传视频资源、解析视频格式、视频截图处理
  9. mac安装虚拟机win10,Mac安装VirtualBox
  10. 记录一次帝国CMS模板被木马入侵后清理的过程,其他CMS类似【大佬勿喷】
  11. pp模块常用表 sap_SAP 常用表 MM PP SD FICO PM PS QM WM 等
  12. cpu功耗排行_笔记本低功耗cpu有哪些 低功耗笔记本cpu排行介绍【图文】
  13. 获取Android设备唯一标识(唯一序列号)
  14. 几款.Net加密/加壳工具的比较
  15. Springer投稿流程——Multimedia Tools and Applications
  16. 智能手机是不是计算机应用设备,otg数据线是什么 otg数据线有什么用 otg数据线的使用方法...
  17. 【Monica的android学习之路】四大组件的生命周期
  18. node+express+mock
  19. Word中如何创建自动编号的标题?
  20. linux安装SecureCRT安装教学

热门文章

  1. 计算机英语短文的总结,描写计算机的英语短文
  2. 智联招聘职位信息爬取并写入xls表中
  3. 计算机信息技术基础...,计算机信息技术基础
  4. 淘宝,京东老喜欢降价售卖,瞬间感觉亏大了。这款报价脚本你值得拥有。
  5. Codeforces Gym100543L Outer space invaders 区间dp 动态规划
  6. 联想td430服务器装系统,ThinkServerRAID300阵列配置基本操作
  7. Distributed Database Using Sharding Database Architecture论文阅读
  8. PHP学习之路(一)——初学PHP
  9. ES-08-ElasticSearch数据分片(shard)
  10. Echarts气泡图(相邻效果,气泡之间不叠加)