shopping计算器
双十一的规则越来越复杂,你的朋友佩奇已经被各种优惠活动折磨的很痛苦,她向朋友圈发起了求助,想找人帮忙写段代码来计算如何花最少的钱。
佩奇的需求是这样的
她给出来了自己的购买规则,一串只包含加减法的算式,怎么在合适的位置加上括号,让这个算式得到最小值,也就是让佩奇花最少的钱。
作为佩奇朋友圈里最聪明的程序员,你肯定不会放过这次表现的机会,那么你该怎么实现这段代码呢?
输入:
仅有一行,佩奇的购物计算表达式
输入约束:
算式最多有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计算器相关推荐
- windows计算器_如何使用Windows 10计算器
windows计算器 The built-in Windows calculator has come a long way since first being introduced with Win ...
- 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...
话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...
- java体重指数计算器程序_java 学习 ——计算器小程序
简易计算器小程序代码: package jisuanqi; //声明需要插入的包 import java.awt.*; import java.lang.Object; import java.lan ...
- c语言计算器实训任务案例,C/C++经典实例之模拟计算器示例代码
前言 本文主要给大家介绍了关于利用C/C++如何实现模拟计算器的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. Problem Description 简单计算器模拟:输入 ...
- 用计算机计算教学反思,《用计算器计算》教学反思
<用计算器计算>教学反思 身为一名刚到岗的人民教师,教学是重要的工作之一,写教学反思能总结我们的教学经验,写教学反思需要注意哪些格式呢?下面是小编为大家整理的<用计算器计算>教 ...
- pythontkinter真实的例子_python小实例——tkinter实战(计算器)
相关学习视频:Python Tkinter 绘图项目 - 网易云课堂study.163.com import tkinter import math import tkinter.messagebo ...
- LabVIEW做一款科学计算器
目录 1.设计思路 2.功能设计 最近学习LabVIEW基础知识,使用其制作一款简易科学计算器,可以实现基本的数学运算功能,效果如下所示: 下载链接:LabVIEW实现科学计算器-嵌入式文档类资源-C ...
- 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)
目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...
- 【机器视觉案例】(5) AI视觉,远程手势控制虚拟计算器,附python完整代码
各位同学好,今天和大家分享一下如何使用MediaPipe+Opencv完成虚拟计算器,先放张图看效果.FPS值为29,食指和中指距离小于规定阈值则认为点击按键,为避免重复数字出现,规定每20帧可点击一 ...
最新文章
- [原创] MAME架构、编译及配置浅析
- (转载)H.264码流的RTP封包说明
- python教程:dict字典常用方法总结,数据解构(解包)
- UVA532 - Dungeon Master(裸BFS)
- leetcode-141. 环形链表:判断链表是否成环
- java递归看回文,如何使用正则表达式实现递归回文检查器? [关闭]
- [Flash开发笔记] List控件--删除指定label或data的项
- MyBatis的ResultMaps之一对多关系
- Java多线程-新特征-锁(下)
- centos7上mycat安装_Mysql+Mycat实现数据库主从同步与读写分离
- 最新400多款微信公众号小游戏源码集合 带HTML5自适应首页
- 3D打印无人机等无人设备4——solidworks逆向建模编辑stl打印文件
- 正好配资点评北交所成立,新基建起爆
- 小趴趴--知乎精华回答的非专业大数据统计
- 《格鲁夫给经理人的第一课》--读书笔记
- [SECCON CTF 2022] 只两个小题pwn_koncha,rev_babycmp,crypto_pqpq
- 微信群影视机器人登录使用教程
- Createjs 学习笔记
- 清除浮动的几种方式,以及各自的优缺点
- android自带下拉阻尼动画,Android实现简单的下拉阻尼效应示例代码