当前位置: 首页 > news >正文

滴滴笔试——算式转移

题目:给出一个仅包含加减乘除四种运算符的算式(不含括号),如1+2*3/4,在保持运算符顺序不变的情况下,现在你可以进行若干次如下操作:如果交换相邻的两个数,表达式值不变,那么你就可以交换这两个数。

#include <vector>
#include <iostream>
using namespace std;
int n;
void QuickSort(vector<int>& nums, int left, int right){if(left >= right) return;int pivot = nums[left], l = left, r = right;while(l < r){while(l < r && nums[r] > pivot) --r;while(l < r && nums[l] <= pivot) ++l;swap(nums[l], nums[r]);}swap(nums[left], nums[r]);QuickSort(nums, left, r-1);QuickSort(nums, r+1, right);
}
int main(){cin >> n;vector<int> nums(n, 0);vector<char> ops(n, '+');for(int i=0; i<n-1; ++i){cin >> nums[i];cin >> ops[i+1];}cin >> nums[n-1];int l = 0, r = 0;while(r < n){while(r < n && ops[r] == ops[l]) ++r;if(ops[l] == '+' || ops[l] == '-'){if(r < n && (ops[r] == '*' || ops[r] == '/')) QuickSort(nums, l, r-2);//为什么要r-2,因为数字总是在运算符的左侧,运算符比数字少一个else QuickSort(nums, l, r-1);}else if(ops[l] == '*'){if(l > 0 && (ops[l-1] == '+' || ops[l-1] == '-')) QuickSort(nums, l-1, r-1);else QuickSort(nums, l, r-1);}else if(ops[l] == '/'){QuickSort(nums, l, r-1);}l = r;}cout << nums[0];for(int i=1; i<n; ++i) cout << ' ' << ops[i] << ' ' << nums[i];return 0;
}
http://www.lryc.cn/news/159040.html

相关文章:

  • [LeetCode] 128. 最长连续序列
  • docker 安装rabbitmq
  • 一文概览NLP句法分析:从理论到PyTorch实战解读
  • NPM 常用命令(三)
  • UWB学习——day1
  • 2023国赛数学建模C题模型代码
  • 2023年高教社杯数学建模国赛C题详细版思路
  • 互联网摸鱼日报(2023-09-07)
  • 并行处理系统
  • 2023国赛数学建模A题思路分析 - 定日镜场的优化设计
  • git企业级使用
  • [docker]笔记-存储管理
  • 记录获取蓝鲸智云token的过程
  • C语言AES加密解密字符串与16进制数据
  • NIFI实现JSON转SQL并插入到数据库表中
  • 【canal系】canal集群异常Could not find first log file name in binary log index file
  • ESP32C3 PWM输出
  • 二、GoLang输出HelloWorld、基本数据类型、变量常量定义、基本类型转换
  • mojo初体验
  • python3 重启docker方法
  • 【js】js中深拷贝与浅拷贝:
  • 大文件上传demo,前端基于Uppy,后端基于koa
  • typeScript--[函数定义]
  • Spring初始化项目
  • Opencv 图像金字塔----高斯和拉普拉斯
  • gitLab(git)误提交命令
  • Rust个人学习笔记2
  • 深入浅出Android同步屏障机制
  • 工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计
  • Python 专栏目录索引