给出一个三角表达式,问是否恒为零

训练的时候队友写了,后来wa,我读了读题感觉他写的没错。。稍微改了一点就对了。。迷

结束后自己复盘,又从头写了一遍这个题,总结下:

这个题分成两部分,一部分是正确处理这个表达式,用c++ stack来做就可以写的很清晰,另一个部分就是判断

首先,就按照它对于input的解释一点点把这个表达式压到栈里面就行,表达式处理完毕之后,栈里面一定只有一个元素,且就是表达式的值

所以问题就在于验证它为恒为零了。。这个思路挺无语的其实,就是找几个有代表性的值带进去算,所有计算值在误差范围内等于零即可判定为恒零

这几个代表性的值确实不能瞎写。。我自己写的时候试了好几次才试出来能过样例的,有的情况下出的测试点多了反而会导致误判,所以感觉这个题目在这里出的不好。。没太大意思

判断时所使用的精度可以高一点,我直接设置到了-9次方了,这个感觉高点更好

下面是我训练后写的代码

code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#define LL long long
using namespace std;
const double pi=acos(-1);
const int Mod=1e9+7;
const double eps=1e-9;int n;
stack<double>s;
string seq[300];
bool calcu(double a,string m[])
{while(!s.empty())s.pop();for(int i=0; i<n; i++){string now=m[i];if(now=="x")s.push(a);else if(now=="sin"){double tmp=s.top();s.pop();s.push(sin(tmp));}else if(now=="cos"){double tmp=s.top();s.pop();s.push(cos(tmp));}else if(now=="tan"){double tmp=s.top();s.pop();s.push(tan(tmp));}else if(now=="+"){double tmp1=s.top();s.pop();double tmp2=s.top();s.pop();s.push(tmp1+tmp2);}else if(now=="-"){double tmp1=s.top();s.pop();double tmp2=s.top();s.pop();s.push(tmp2-tmp1);}else{double tmp1=s.top();s.pop();double tmp2=s.top();s.pop();s.push(tmp1*tmp2);}}double ans=s.top();if(fabs(ans)<=eps)return true;return false;
}
int main()
{//freopen("out.txt","w",stdout);while(cin>>n){if(n==0)break;for(int i=0; i<n; i++){cin>>seq[i];}bool flag=true;if(!calcu(0,seq)||!calcu(3.1415,seq)||!calcu(1.0,seq)||!calcu(-1234.5,seq)||!calcu(120,seq)||!calcu(-123.4,seq)||!calcu(9876,seq)||!calcu(80,seq)||!calcu(acos(-1)/3.0,seq)||!calcu(-acos(-1)/3.0,seq)||!calcu(acos(-1),seq)){flag=false;}if(flag)cout<<"Identity"<<endl;else cout<<"Not an identity"<<endl;}
}

Gym100015 I Identity Checker 栈容器使用,数学相关推荐

  1. abap判断包含字符当中包含小数点_剑指Offer整理3 -- 栈和队列 + 数学和字符串

    专题3 栈和队列 + 数学和字符串 专题3-1 栈和队列 1. 栈的压入弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字 ...

  2. 数据结构-栈容器的实现

    2021/11/23 更新 将用于生成栈节点的StackNode类改为Stack类的内嵌类,不仅使组织结构更合理,还减少了函数调用,有效减少了代码量. 栈的实现 栈是一种重要的数据结构,是一种线性结构 ...

  3. C++小课堂:STL中的栈容器(stack)

    栈很像我们的箱子,我们将衣服这些装进箱子,第一个拿出来的肯定是最顶上的那件衣服,栈也一样. 今天我们就来学习栈容器:stack 头文件:<stack> 之前介绍的vector其实是STL中 ...

  4. C++STL之stack栈容器

    C++STL之stack栈容器 1. 再谈栈 回顾一下之前所学的栈,栈是一种先进后出的数据结构,而实现方式需要创建多个结构体,通过链式的方式进行实现,这是标准的栈的思路,而在STL中栈可以以更为简单的 ...

  5. C++ STL之stack栈容器

    一.STL: 1)标准模版库,提供了通用的模版库和函数.如:向量.链表.队列.栈. 2)核心组建包括:容器(Containers).算法(Algorithms).迭代器(Iterators). 二.S ...

  6. java中定义一个栈容器_Java 容器之 Connection栈队列及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  7. c++ stl栈容器stack用法介绍

    stack堆栈容器 堆栈是一个线性表,插入和删除只在表的一端进行.这一端称为栈顶(Stack Top),另一端则为栈底(Stack Bottom).堆栈的元素插入称为入栈,元素的删除称为出栈.由于元素 ...

  8. cqueue结构pop_c++ stl栈容器stack的pop(),push()等用法介绍及头文件

    C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,--也就是说实现了一个先进后出(FILO)的数据结构. c++ stl栈stack的头文件为: #include c++ ...

  9. P6046-纯粹容器【数学期望,组合数】

    正题 题目链接:https://www.luogu.com.cn/problem/P6046 题目大意 nnn个数,每次选择两个相邻的数删除小的那个,求每个数期望存活轮数. 解题思路 相当于一条链每次 ...

  10. OpenStack——开放栈(源自NASA的开源云管理软件)

    概述 是什么? 开放栈(OpenStack)是一个免费的开放标准的云计算平台,用于构建基础设施即服务(IaaS)业务. 谁在用? 开放栈同时被公有云和私有云大量部署使用,几乎是目前最流行的云平台构建软 ...

最新文章

  1. ERP与EWM集成配置---ERP 端(一)
  2. 牛客网——求平均年龄(水题)
  3. 安天移动安全:Janus高危漏洞深度分析
  4. excel合并计算_【Excel】合并计算和模拟分析的应用
  5. python po设计模式_(Python)PO设计模式
  6. UmiJS CDN 部署之 publicPath
  7. 基于linux的netfilter处理数据包的过程分析,基于Netfilter的网络数据包分析
  8. 大数据学习笔记08:Java程序访问HDFS
  9. 雷电3和Type C区别
  10. MySQL引擎innodb和mysum_mysql数据库引擎 MyISAM和 InnoDB区别
  11. c++用一级运算比较大小_python学习五-python运算符
  12. python与c语言数据交互,python与c语言交互---学习012
  13. 四子棋 java_JAVA写的四子棋
  14. 图对比学习的应用(NCL,SimGRACE,ClusterSCL)
  15. JAVA中用POI操作word
  16. 福玛特机器人评测_离子净化!福玛特E-R350W扫地机器人试玩
  17. 小米手机便签怎么看写了多少字 小米手机便签统计字数方法
  18. MySQL优化之超大分页查询
  19. 《转》理解HTTP消息头
  20. 在数据表中添加一个字段的SQL语句怎么写

热门文章

  1. 智鼎在线测评是测什么_(详解)人才测评工具和人才测评方法
  2. 突破HR的职业发展瓶颈:放弃“优秀”!
  3. 网络服务器配置管理综合实训项目心得体会,服务器的配置与管理实训报告.doc...
  4. Unity-Chan Toon Shader 2 介绍
  5. 目标跟踪(4)使用dlib进行对象跟踪
  6. ae镜头光晕插件Optical Flares
  7. 专科三年的教训,写给自己,也给正在学习路上的你
  8. mysql 语法大全
  9. httprunner 3.x学习10 - parameters 参数化
  10. 【3D建模制作技巧分享】Maya如何给模型上色与渲染