NOIP2000普及组 T1计算器的改良
主要考字符串处理,把等式从等号中间断开,左边的区域为left,右边的区域为right。
开四个数组分别用来存储区域left和right中未知数的系数,区域left和right中的常数
先处理区域left,把区域left中含有未知数的数字和常数分别存储进数组,再处理区域right(字符串处理这里省略)
最后把存储区域left和right的未知数系数和常数的数组分别化简(合并同类项),进行平时解方程时候的模拟就好了。
主要看代码理解吧,思路讲的有点抽象了。
var
l_unk,r_unk,l_num,r_num:array[..] of longint; //上面所说的四个数组
top1 ,top2 ,top3 ,top4 :longint; //四个数组的栈顶
s,str:string;
i,j:longint;
unk:char; //未知数的符号
mid,last,value:longint;
begin
readln(s);
for i:= to length(s) do //处理区域left
begin
if s[i] in ['a'..'z'] then unk:=s[i]; //找出未知数
if s[i]='=' then mid:=i; //找出等式中间位置
end;
if s[length(s)]<>unk then
s:=s+'+';
last:=;
for i:= to mid do
begin
if s[i]=unk then //如果遇到未知数
begin
str:=copy(s,last,i-last); //字符串处理
val(str,value); //字符串转数字
inc(top1);
l_unk[top1]:=value; //进栈
last:=i+;
end;
if (not(s[i] in [''..''])) and (s[i]<>unk) and (i<>last) then //如果遇到了常数
begin
str:=copy(s,last,i-last); //字符串处理
val(str,value); //转数字
inc(top3);
l_num[top3]:=value; //进栈
last:=i;
end;
end;
last:=mid+;
for i:=mid+ to length(s) do //处理区域right
begin
if s[i]=unk then // 同上
begin
str:=copy(s,last,i-last);
val(str,value);
inc(top2);
r_unk[top2]:=value;
last:=i+;
end;
if (not(s[i] in [''..''])) and (s[i]<>unk) and (i<>last) then
begin
str:=copy(s,last,i-last);
val(str,value);
inc(top4);
r_num[top4]:=value;
last:=i;
end;
end;
for i:=top1- downto do l_unk[i]:=l_unk[i]+l_unk[i+]; //化简数组,合并同类项
for i:=top2- downto do r_unk[i]:=r_unk[i]+r_unk[i+];
for i:=top3- downto do l_num[i]:=l_num[i]+l_num[i+];
for i:=top4- downto do r_num[i]:=r_num[i]+r_num[i+];
l_unk[]:=l_unk[]-r_unk[]; //解方程,左边未知数系数加上右边未知数的系数的相反数
r_num[]:=r_num[]-l_num[]; //解方程,右边常数加上左边常数的相反数
writeln(unk,'=',r_num[]/l_unk[]::); //输出保留3位小数
end.
NOIP2000普及组 T1计算器的改良的更多相关文章
- 【00NOIP普及组】计算器的改良(信息学奥赛一本通 1910)(洛谷 1022)
[题目描述] NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先 ...
- 2321. 【NOIP普及组T1】方程
2321. [NOIP普及组T1]方程 时间限制: 1000 ms 空间限制: 262144 KB 题目描述
- NOIP2008 普及组T1 ISBN号码 解题报告-S.B.S.
题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一 ...
- 洛谷【P2669】NOIP2015普及组 T1金币
我对模拟的理解:http://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.luogu.org/problemnew/show/P266 ...
- NOIP2017普及组T1题解
神奇的链接 上面时题目. 其实不得不说,这一题很水,比2015年的第一题水多了. 直接按题目套公式就行了,当然你也可以像我一样化简一下. 直接看代码: #include<cstdio> # ...
- 洛谷 1017 进制转换 (NOIp2000提高组T1)
[题解] 纯模拟题. 我们都知道十进制数化成m进制数可以用短除法,即除m取余.逆序排列.而m进制数化为十进制数,按权展开求和即可. 但在本题中进制的基数R可能为负数,我们知道a%R的符号与R一致,也就 ...
- 洛谷 题解 P5015 【标题统计】 NOIP2018 普及组 T1
没有人用 scanf("%c", &ch) != EOF 吗? scanf 和 EOF 会伤心的. 思路:逐个读入字符,遇到EOF中止,对于每个读入的字符进行判断. 附上考 ...
- [NOIP2014普及组T1]珠心算测验 - NTT
求数组有多少个数,恰好等于集合中另外两个(不同的)数之和? 注意到数集比较小,而且涉及到下标的加法,可以很自然地想到卷积 注意减去自己加自己的贡献 真是一道NTT练手好题 #include <i ...
- NOIP2000提高组T1 进制转换
https://www.luogu.org/problem/P1017 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的值减1为指数,以10为底数的幂之和 ...
随机推荐
- 【AGC 005F】Many Easy Problems
Description One day, Takahashi was given the following problem from Aoki: You are given a tree with ...
- jquery实现点击页面空白处,弹框消失
要求:点击1,弹框2显示,点击空白处,弹框2消失 $("#AddDevices"):按钮1 $(".addDeviceBox")弹框2 //点击添加设备弹框 $ ...
- setLocale(java.util.Locale), setCharacterEncoding(java.lang.String),setContentType(java.lang.String type)
对于setCharacterEncoding(java.lang.String),这个方法是javax.servlet.ServletRequest和javax.servlet.ServletResp ...
- [经验交流] kubernetes v1.11 更新了高可用方案
kubernetes v1.11已经发布了一段时间,和以前相比,一个显著亮点是更新了高可用方案: https://kubernetes.io/docs/setup/independent/high-a ...
- 2018-2019-2 《网络对抗技术》 Exp0 Kali安装 20165221 Week1
2018-2019-2 <网络对抗技术> Exp0 Kali安装 20165221 Week1 安装Vmware 上学期已经安装过,不再赘述. 如需安装,可参考如何安装vmware 下载v ...
- python数字常量
数学常量 pi 数学常量 pi(圆周率,一般以π来表示) e 数学常量 e,e即自然常数(自然常数).
- Python爬虫案例-获取最新的中国行政区域划分
源网页:中国统计局标准 http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/ 打开网页后可以分析出行政区域划分共分为5层 根据传入参数,生成网页 ...
- js 个人笔记
/* * Created by lsw 2018-06 */ ; (function (window) { //js ready var ie = !!(window.attachEvent & ...
- mysql-数据(记录)相关操作(增删改查)及权限管理
一.介绍 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查 ...
- JavaScript代码规范
变量名:驼峰命名法(首单词小写,后面每个单词首字母大写) firstName = "John"; lastName = "Doe"; price = 19.90 ...