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为底数的幂之和 ...
随机推荐
- UE4代码片断备份
在Actor内创建一个StaticMesh #include "Components/StaticMeshComponent.h" #include "Engine/St ...
- 浅入深出Vue系列
浅入深出Vue导航 导航帖,直接点击标题即可. 文中所有涉及到的资源链接均在最下方列举出来了. 前言 基础篇 浅入深出Vue:工具准备之WebStorm搭建及配置 浅入深出Vue之工具准备(二):Po ...
- 解决:在微信中访问app下载链接提示“已停止访问该网页”
前言 现如今微信对第三方推广链接的审核是越来越严格了,域名在微信中分享转发经常会被拦截,一旦被拦截用户就只能复制链接手动打开浏览器粘贴才能访问,要不然就是换个域名再推,周而复始.无论是哪一种情况都会面 ...
- python多任务抓取图片
import re import urllib.request import gevent def download(image_download, images_path,i): headers = ...
- FATAL ERROR: please install the following Perl modules before executing
运行安装mysql 报错 [root@localhost mysql-mult]# ./scripts/mysql_install_db --defaults-file=conf/3306my.cn ...
- 嵌入式Linux学习路线
最近比较忙,对于嵌入式的相关学习一直没有很好的开展.今天也看了不少的嵌入式Linux的学习路线,也和几个工作过的朋友聊了聊,想把之后的学习过程记录下来. 自己以后想从事驱动开发这方面的工作,因为大多数 ...
- python笔记01-05
作者:Vamei 出处:http://www.cnblogs.com/vamei https://blog.csdn.net/flyfrommath/article/details/77447587 ...
- C++入门篇十
静态成员变量:可以共享数据,类内声明,类外初始化(实现) // 静态成员变量.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include &q ...
- 移动端rem与px适应js
方法一: (function (doc, win) { var docEl = doc.documentElement, resizeEvt = "orientationchange&quo ...
- 一场由like引发的事故
故事背景: 有一张用户级表,数据量在千万级别,而运营人员要查看这张表,其中有一项查询条件为根据“错误类型”(单值)查出所有包含这个类型的数据,而这个数据类型在数据库存放的方式类似于 “1,2,3,4, ...