DS实验题 最大最小
题目:
算法设计:
计算最小值算法:
设置一个flag,flag为1的时候代表遇到*号;
遇到数字时:
flag为0进栈;
flag为1的时候,从栈顶提出一个元素和当前元素运算,结果进栈
最后对栈进行加法运算,得到结果,mod。
计算最大值算法:
设置一个flag,flag为1的时候代表遇到+号;
设置一个累加器pt;
遇到数字时
1.flag为0进栈;
2.flag为1的时候,需要对之前flag的状态进行判断:
flag_pre若为1,更新累加器;
flag_pre若为0,从栈顶压出一个元素,更新累加器;
遇到乘号时
1.flag为0,continue;
2.flag为1,将flag置0,累加器结果进栈,累加器置0;
遍历字符串结束时,特判累加器是否为0,不为0进栈;
最后对栈进行乘法运算,得到结果,mod。
代码:
//
// main.cpp
// 最大最小
//
// Created by wasdns on 16/11/10.
// Copyright © 2016年 wasdns. All rights reserved.
//#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <stack>
using namespace std;#define modn 870764322char str[505]; //字符串/*计算最小值算法:设置一个flag,flag为1的时候代表遇到*号;遇到数字时:flag为0进栈;flag为1的时候,从栈顶提出一个元素和当前元素运算,结果进栈最后对栈进行加法运算,得到结果,mod。*/int Nomalcal()
{stack<int> ins;int i, cal_result = 0;int flag = 0;for (i = 0; i < strlen(str); i++){if (str[i] == '(' || str[i] == ')') continue; //遇到括号略过if (str[i] >= '0' && str[i] <= '9') //遇到数字{int pt = str[i] - '0';if (flag == 1) { //flag=1int pre = ins.top();ins.pop();int64_t temp = pt; //为防止溢出,进行转换temp *= pre;temp %= modn;pt = (int)temp;flag = 0;}ins.push(pt);}else if (str[i] == '*') { //遇到乘号flag = 1;continue;}else continue; //遇到加号}while (!ins.empty()) { //计算结果cal_result += ins.top();cal_result %= modn;ins.pop();}return cal_result;
}/*计算最大值算法:设置一个flag,flag为1的时候代表遇到+号;设置一个累加器pt;遇到数字时1.flag为0进栈;2.flag为1的时候,需要对之前flag的状态进行判断:flag_pre若为1,更新累加器;flag_pre若为0,从栈顶压出一个元素,更新累加器;遇到乘号时1.flag为0,continue;2.flag为1,将flag置0,累加器结果进栈,累加器置0;遍历字符串结束时,特判累加器是否为0,不为0进栈;最后对栈进行乘法运算,得到结果,mod。*/int maxcal()
{stack<int> ins;int i, cal_result = 1; //注意,结果初始置1int flag = 0;int pt = 0;for (i = 0; i < strlen(str); i++){if (str[i] == '(' || str[i] == ')') continue; //遇到括号if (str[i] >= '0' && str[i] <= '9') //遇到数字{if (flag == 1) { //1.flag=1pt += (str[i] - '0');}else { //2.flag=0pt = (str[i] - '0');ins.push(pt);pt = 0;}continue;}else if (str[i] == '*') { //遇到乘号if (flag == 1) { //flag=1时flag = 0;ins.push(pt);pt = 0;}continue;}else { //遇到加号时if (flag == 0) {int pre = ins.top();ins.pop();pt += pre;}flag = 1;continue;}}if (pt != 0) { //特判ins.push(pt);}int64_t temp = 1;while (!ins.empty()) { //计算结果,防止溢出temp *= (ins.top());temp %= modn;ins.pop();}cal_result = (int)temp;return cal_result;
}int main()
{scanf("%s", str);getchar();cout << maxcal() << endl;cout << Nomalcal() << endl;return 0;
}
结果:
小结:
上面的代码交上去是编译错误,需要把里面的int64_t类型换成__int64
注意:防止溢出;因此在计算结果的时候(一般在乘法的地方),进行一次类型的转换,用int64存储,取mod之后再转为int。
2016/11/10
DS实验题 最大最小相关推荐
- DS实验题 融合软泥怪-2 Heap实现
题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...
- DS实验题 Inversion
题目: 解题过程: 第一次做这题的时候,很自然的想到了冒泡和选择,我交的代码是用选择写的.基本全WA(摊手). 贴上第一次的代码: // // main.cpp // sequenceschange ...
- DS实验题 击鼓传花
题目: 代码1(数组实现): // // main.cpp // DS-击鼓传花 // // Created by wasdns on 16/11/9. // Copyright © 2016年 wa ...
- DS实验题 融合软泥怪-1
题目 思路 很容易想到第一种做法,用Huffman算法,从森林中找出两个值最小的节点,合并再加入森林,在这个过程中不断记录. 但是每一次需要sort一遍,将最小的两个值节点置于头两个节点,最坏情况下复 ...
- DS实验题 Floyd最短路径 Prim最小生成树
题目: 提示: Floyd最短路径算法实现(未测试): // // main.cpp // Alg_Floyd_playgame // // Created by wasdns on 16/11/19 ...
- 华中农业大学python实验题
知识汇总 博客 地址 内容 华中农业大学Python期末速成笔记 https://blog.csdn.net/m0_46521785/category_10626330.html 华中农业大学pyth ...
- 18.网络技术——BGP的原理+实验题(后附练习题)
目录 1. BGP的概述 1.1 BGP消息类型及状态转换 1.2 BGP路由通告原则 1.3 BGP路径矢量特征 1.4 BGP协议特征 1.5 BGP Peer 1.6 IBGP 水平分割规则 1 ...
- 算法与数据结构实验题 10.23 寡人的难题
算法与数据结构实验题 10.23 寡人的难题 ★实验任务 寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的 ...
- 北京林业大学oj实验题search使用函数模板查找不同数据类型数组中元素是否存在
北京林业大学oj实验题search 使用模板函数的方法来查找不同数据类型数组中的元素是否存在,若存在则返回该元素下标,若不存在则返回-1 题目: 描述 设计一个模板函数,实现在一个给定的数组中查找给定 ...
- 小孩的游戏 - 2021数据结构 排序和选择实验题
小孩的游戏 - 2021数据结构 排序和选择实验题 pre 做都做了, 干脆发上来算了 : D 题目分析 算法与数据结构实验题 5.18 小孩的游戏 ★实验任务 一群小孩子在玩游戏,游戏规则是这样子, ...
最新文章
- vue动态发布到线上_vue在线动态切换主题色方案
- mysql 二进制转字符串_MySql字符转义 | 学步园
- 第二节:重写(new)、覆写(overwrite)、和重载(overload)
- 【qduoj】奇数阶幻方 (构造)
- segmenter.go
- codeforces D. Design Tutorial: Inverse the Problem
- leetcode53 python3 96ms 最大子序列和 python解法
- dio设置自定义post请求_基于dio库封装flutter项目的标准网络框架
- RazorPage介绍(一)
- 映美精两个相机同步采集求助
- cocos2d实现画笔功能及常用的绘制函数
- 《从零开始做运营》心得
- 【洛谷 P3191】 [HNOI2007]紧急疏散EVACUATE(二分答案,最大流)
- 「链节点活动年度总结」2019年区块链行业会议回顾
- 【招生目录】 2023年北京交通大学计算机学院博士研究生招生专业目录
- oCam 中文绿色版 - 免费实用的屏幕录像与截图软件 (制作视频教程/录制直播视频)
- epson连接计算机后无法打印,EPSON针式打印机连接正常无法打印解决
- 解决open()不能打开带中文的文件路径
- 2201: 逆置线性表(线性表)
- Python Selenium + PhantomJS爬取考拉海购商品数据
热门文章
- 20140115-URL编码与解码
- 学校管理系统java(数据库、源码、演讲内容、ppt等)
- html下载文件和上传文件(图片)(java后台(HttpServlet))打开保存路径和选择文件录取+(乱码UTF-8)+包...
- [Canvas]空战游戏进阶 增加己方子弹管理类
- is内存地址 id 地址比较 小数据池概念
- java 多线程 28 : 多线程组件之 Semaphore 信号量
- IOS7开发~Xcode5制作framework
- Windows环境zip版PostgreSQL数据库安装
- mysqldump怎么用 mysqldump没反应 mysqldump语法错误 mysqldump备份 mysql恢复 source命令 采用Navicat备份与mysqldump备份的区别...
- BerkeleyDB