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为底数的幂之和 ...
随机推荐
- python3 练手实例5 做一个简单电子时钟
import time,sys,os while(1): t = time.strftime('%Y-%m-%d\n%H:%M:%S',time.localtime(time.time())) pri ...
- CTR预估中GBDT与LR融合方案(转载)
1.背景 CTR预估,广告点击率(Click-Through Rate Prediction)是互联网计算广告中的关键环节,预估准确性直接影响公司广告收入.CTR预估中用的最多的模型是LR(Logis ...
- Babel学习小记
一.babel配置文件中的plugins和presets是什么? 1.首先说说babel是什么,babel是一个JavaScript转码器,帮助我们把浏览器不兼容的ES6语法转换成ES5语法: 2.接 ...
- JavaScript定时器详解
假设有以下场景 setTimeout(function timeoutHandler(){ /*Some timeout handle code that runs for 6ms*/ }, 10); ...
- 2018-2019-20175315 实验一 《Java开发环境的熟悉》实验报告
2018-2019-20175315实验一 <Java开发环境的熟悉>实验报告 一.实验内容及步骤 实验1 1.用mkdir建立“20175303exp1”的目录 2.在“20175303 ...
- 微信支付errcode:40163,code been used,错误小结
1.配置时注意,支付平台中的支付授权目录, 注意大小写. 昨天碰到的问题,就是自己跳转时,路径写的全小写.跳转支付页面也能跳转过去,但是log中总是调用两次code,报40163错误.后改成和公总号支 ...
- 【easy-】437. Path Sum III 二叉树任意起始区间和
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...
- web.xml 简记
web.xml (tomcat启动时读取的配置文件) 首页配置 <welcome-file-list>:index.jsp servlet配置(<servlet>和<se ...
- FreeRTOS 启动进程调度后,程序卡死的部分原因分析。
现象:1,RTOS 使用时 系统卡启动文件 B .处. 原因分析:该种情况是由于定义开启了中断,但是未开启中断处理服务.程序执行到中断响应式无对应的程序响应 ...
- 末学者笔记——SAMBA服务、FTP服务讲解
samba服务 一.概念: Smb主要作为网络通信协议; Smb是基于cs(client,sever)架构: 完成Linux与windows之间的共享:linux与linux之间共享用NFS 二. ...