- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NOIP2017提高组equal等价表达式
【问题描述】?
明明进了中学之后,学到了代数表达式。有一天,他碰到一个很麻烦的选择题。这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数表达式是和题干中的表达式等价的。
这个题目手算很麻烦,因为明明对计算机编程很感兴趣,所以他想是不是可以用计算机来解决这个问题。假设你是明明,能完成这个任务吗??
这个选择题中的每个表达式都满足下面的性质:
1.? 表达式只可能包含一个变量‘a’。
2.? 表达式中出现的数都是正整数,而且都小于10000。
3.? 表达式中可以包括四种运算‘+’(加),‘-’(减),‘*’(乘),‘^’(乘幂),以及小括号‘(’,‘)’。小括号的优先级最高,其次是‘^’,然后是‘*’,最后是‘+’和‘-’。‘+’和‘-’的优先级是相同的。相同优先级的运算从左到右进行。(注意:运算符‘+’,‘-’,‘*’,‘^’以及小括号‘(’,‘)’都是英文字符)
4.? 幂指数只可能是1到10之间的正整数(包括1和10)。
5.? 表达式内部,头部或者尾部都可能有一些多余的空格。
下面是一些合理的表达式的例子:
((a^1) ^ 2)^3,a*a+a-a,((a+a)),9999+(a-a)*a,1 + (a -1)^3,1^10^9……
?
【输入文件】?
输入文件equal.in的第一行给出的是题干中的表达式。第二行是一个整数n(2 = n = 26),表示选项的个数。后面n行,每行包括一个选项中的表达式。这n个选项的标号分别是A,B,C,D……
输入中的表达式的长度都不超过50个字符,而且保证选项中总有表达式和题干中的表达式是等价的。
?
【输出文件】?
输出文件equal.out包括一行,这一行包括一系列选项的标号,表示哪些选项是和题干中的表达式等价的。选项的标号按照字母顺序排列,而且之间没有空格。
?
【样例输入】
?
( a + 1) ^2
3
(a-1)^2+4*a
a + 1+ a
a^2 + 2 * a * 1 + 1^2 + 10 -10 +a -a
?
【样例输出】?
AC
?
【数据规模】?
对于30%的数据,表达式中只可能出现两种运算符‘+’和‘-’;对于其它的数据,四种运算符‘+’,‘-’,‘*’,‘^’在表达式中都可能出现。
对于全部的数据,表达式中都可能出现小括号‘(’和‘)’。
算法分析:
用栈的方法求表达式的值是经典的算法。考虑到多项式的处理比较麻烦,不妨对变量a进行多次赋值以判断表达式是否等价。
值得注意,由于进行数值运算,采用哪种数据类型成为程序是否正确的关键。下面的程序,采取mod m的方法,其中m为任意正整数。当对a多次赋值,且m取不同的较大的正整数时,可以保证算法的正确性。
const max=maxlongint;
com:array[1..7,1..7] of char=((,,,,,,),
(,,,,,,),
(,,,,,,),
(,,,,,,),
(,,,,,=,X),
(,,,,X,,),
(,,,,,X,X));
var
oped:array[1..1000] of longint;
optr:array[1..1000] of char; s:array[0..26] of string;
value:array[0..26,-4..4] of int64; ans:array[0..26] of boolean;
n,i,j,p,q:longint; a,b,ned,ntr:int64; there:char; flag:boolean;
function compare(w1,w2:char):char;
var x1,x2:integer;
begin
case w1 of
+:x1:=1;
-:x1:=2;
*:x1:=3;
^:x1:=4;
(:x1:=5;
):x1:=6;
#:x1:=7;
end;
case w2 of
+:x2:=1;
-:x2:=2;
*:x2:=3;
^:x2:=4;
(:x2:=5;
):x2:=6;
#:x2:=7;
您可能关注的文档
- matlab实验18带答案.doc
- matlab实验报告求代数方程的近似根.doc
- matlab四合一dream.doc
- Matlab实验8章新磊4222.doc
- MATLAB对文本文件txt进行数据存取.doc
- Matlab常用基本指令按字母.doc
- Matlab工具箱总汇WORD版.doc
- MATLAB应用技术实验指导书.doc
- MATLAB数值与矩阵运算.doc
- Matlab求解微分方程组及偏微分方程组.doc
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)