双十一的规则越来越复杂,你的朋友佩奇已经被各种优惠活动折磨的很痛苦,她向朋友圈发起了求助,想找人帮忙写段代码来计算如何花最少的钱。

佩奇的需求是这样的

她给出来了自己的购买规则,一串只包含加减法的算式,怎么在合适的位置加上括号,让这个算式得到最小值,也就是让佩奇花最少的钱。

作为佩奇朋友圈里最聪明的程序员,你肯定不会放过这次表现的机会,那么你该怎么实现这段代码呢?

输入:

仅有一行,佩奇的购物计算表达式

输入约束:

算式最多有50个字符,且其中仅包含0-9和+、-
算式的第一个字符一定是数字
算式中不会连续出现两个运算符
算式中每个整数最多有5位
输出:

一个整数:佩奇最少需要花费的钱数 (可能是负数,佩奇还能赚到钱)

举例1:

输入:

55-50+30

输出:

-25

解释:

通过增加括号,该算式有两种可能的结果:55-50+30=35和55-(50+30)=-25

举例2:

输入:

10+30+40+20

输出:

100

举例3:

输入:

00009-00008

输出:

1

解释:注意算式中的整数前面可能会出现若干个0.

package com.guavaprogram.guava.main;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class U2407p25 {private static int count;private static List<LeftAndRight> result = new ArrayList<>();private static List<Integer> locate = new ArrayList<>();public static void main(String[] args) {Scanner sc=new Scanner(System.in);String s = sc.next();List<String> ss = new ArrayList<>();List<Integer> nums = new ArrayList<>();char[] chars = s.toCharArray();int len = 0;int num = 0;while(len < chars.length){if (chars[len] == '+'){nums.add(num);ss.add(String.valueOf(num));ss.add(String.valueOf(chars[len]));num =0;} else if (chars[len] == '-'){nums.add(num);ss.add(String.valueOf(num));locate.add(ss.size());ss.add(String.valueOf(chars[len]));num=0;} else {int temp = Integer.valueOf(String.valueOf(chars[len]));num = num*10 + temp;}len++;if(len == chars.length){ss.add(String.valueOf(num));}}getSmaller(ss);}private static void getSmaller(List<String> nums){int smaller = 0;if(nums.size() == 1){smaller = Integer.valueOf(nums.get(0));} else{for(int i = 0 ; i < locate.size(); i++){LeftAndRight leftAndRight = new LeftAndRight();List<String> left = nums.subList(0,locate.get(i));List<String> right = nums.subList(locate.get(i)+1,nums.size());for(int j = 0 ; j < left.size(); j++){switch (left.get(j)){case "+": {j++;leftAndRight.setLeft(leftAndRight.getLeft()+Integer.valueOf(left.get(j)));break;}case "-":{j++;leftAndRight.setLeft(leftAndRight.getLeft()-Integer.parseInt(left.get(j)));break;}default:leftAndRight.setLeft(Integer.valueOf(left.get(j)));break;}}for(int j = 0 ; j < right.size(); j++){switch (right.get(j)){case "+":case "-": {j++;leftAndRight.setRight(leftAndRight.getRight()+Integer.valueOf(right.get(j)));break;}default:leftAndRight.setRight(Integer.valueOf(right.get(j)));break;}}result.add(leftAndRight);int res = leftAndRight.getLeft() - leftAndRight.getRight();if (i==0){smaller = res;}if(smaller > res){smaller = res;}}if(locate.size()==0){for (int j = 0; j< nums.size();j++){smaller += Integer.valueOf(nums.get(j));j++;}}}System.out.println(smaller);}static class LeftAndRight{private int left;private int right;public int getLeft() {return left;}public void setLeft(int left) {this.left = left;}public int getRight() {return right;}public void setRight(int right) {this.right = right;}}
}

shopping计算器相关推荐

  1. windows计算器_如何使用Windows 10计算器

    windows计算器 The built-in Windows calculator has come a long way since first being introduced with Win ...

  2. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  3. java体重指数计算器程序_java 学习 ——计算器小程序

    简易计算器小程序代码: package jisuanqi; //声明需要插入的包 import java.awt.*; import java.lang.Object; import java.lan ...

  4. c语言计算器实训任务案例,C/C++经典实例之模拟计算器示例代码

    前言 本文主要给大家介绍了关于利用C/C++如何实现模拟计算器的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. Problem Description 简单计算器模拟:输入 ...

  5. 用计算机计算教学反思,《用计算器计算》教学反思

    <用计算器计算>教学反思 身为一名刚到岗的人民教师,教学是重要的工作之一,写教学反思能总结我们的教学经验,写教学反思需要注意哪些格式呢?下面是小编为大家整理的<用计算器计算>教 ...

  6. pythontkinter真实的例子_python小实例——tkinter实战(计算器)

    相关学习视频:Python Tkinter 绘图项目 - 网易云课堂​study.163.com import tkinter import math import tkinter.messagebo ...

  7. LabVIEW做一款科学计算器

    目录 1.设计思路 2.功能设计 最近学习LabVIEW基础知识,使用其制作一款简易科学计算器,可以实现基本的数学运算功能,效果如下所示: 下载链接:LabVIEW实现科学计算器-嵌入式文档类资源-C ...

  8. 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)

    目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...

  9. 【机器视觉案例】(5) AI视觉,远程手势控制虚拟计算器,附python完整代码

    各位同学好,今天和大家分享一下如何使用MediaPipe+Opencv完成虚拟计算器,先放张图看效果.FPS值为29,食指和中指距离小于规定阈值则认为点击按键,为避免重复数字出现,规定每20帧可点击一 ...

最新文章

  1. [原创] MAME架构、编译及配置浅析
  2. (转载)H.264码流的RTP封包说明
  3. python教程:dict字典常用方法总结,数据解构(解包)
  4. UVA532 - Dungeon Master(裸BFS)
  5. leetcode-141. 环形链表:判断链表是否成环
  6. java递归看回文,如何使用正则表达式实现递归回文检查器? [关闭]
  7. [Flash开发笔记] List控件--删除指定label或data的项
  8. MyBatis的ResultMaps之一对多关系
  9. Java多线程-新特征-锁(下)
  10. centos7上mycat安装_Mysql+Mycat实现数据库主从同步与读写分离
  11. 最新400多款微信公众号小游戏源码集合 带HTML5自适应首页
  12. 3D打印无人机等无人设备4——solidworks逆向建模编辑stl打印文件
  13. 正好配资点评北交所成立,新基建起爆
  14. 小趴趴--知乎精华回答的非专业大数据统计
  15. 《格鲁夫给经理人的第一课》--读书笔记
  16. [SECCON CTF 2022] 只两个小题pwn_koncha,rev_babycmp,crypto_pqpq
  17. 微信群影视机器人登录使用教程
  18. Createjs 学习笔记
  19. 清除浮动的几种方式,以及各自的优缺点
  20. android自带下拉阻尼动画,Android实现简单的下拉阻尼效应示例代码

热门文章

  1. 前端字节跳动笔试题(2022)
  2. 第20天 javascript浏览器缓存机制
  3. 平安科技前端开发面试总结
  4. 国际期货|外盘期货:恒生指数涨02%、恒生科技指数跌0.08%
  5. stable diffusion webui mov2mov
  6. mptcp on mininet
  7. Opencv--cvRound()、cvFloor()、 cvCeil()
  8. 通过adb指令push文件
  9. mdev 自动mount U盘、USB硬盘
  10. 计算机网络(第7版)——谢希仁 习题3-24 3-25