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为底数的幂之和 ...
随机推荐
- 《B2C商城》电商平台搭建流程分析
商城网站建设在当今互联网时代中是非常重要的.商城网站,是企业产品展示.品牌宣传与消费者互动交流的一个平台,利用好这样的一个平台,就能占得先机.那么问题来了,商城网站如何建设呢?这对于企业来说真的是一个 ...
- C语言strcpy,strncpy和strlcpy讲解
前言 C风格的字符串处理函数有很多,如strcpy().strcat()等等. strcpy与strcat char* strcpy (char* dest, const char* src); ch ...
- grep、awk、sed的巩固练习
作者:邓聪聪 提取日志或文本中的关键内容 Apr :: localhost NetworkManager[]: <info> (eno16777736): Activation: star ...
- I2C通信基本原理及其实现
I2C是一种总线式结构,它只需要SCL时钟信号线与SDA数据线,两根线就能将连接与总线上的设备实现数据通信,由于它的简便的构造设计,于是成为一种较为常用的通信方式. 由于I2C采用的是主从式通信方式, ...
- centos定时删除指定日期之前的文件
* 5 * * * find /tmp/* -name "yhwl_task.log*" -ctime +3 -exec rm -rf {} \; * 5 * * * find / ...
- Rollup.js 实践
音乐分享: B.o.B Ft. Marko Penn - <Roll up> ——————————————————————————————————————————————————————— ...
- 【Linux】常见基础命令之文件操作
vi:编辑文件 lilip@ubuntu:~/test/page$ vi test.txt i 切换到输入模式,以输入字符. x 删除当前光标所在处的字符. : ...
- .NET Core----七牛云图片上传
在引用官方的qiniu.core的nuget是总是发生错误,错误如下,所以就在网上找到了一种解决方案,并稍微改进了一番, 以下是引用图: 方法一: 第一步:引用nuge 第二步:新建项目新建控制器视图 ...
- Vue:window.onresize
1. 添加属性screenHeight 和 timer. screenHeight: window.innerHeight timer: '' // window.onresize函数频繁调用时,页 ...
- 算法工程师<编程题>
<编程题> 1.[Maximum Product Subarray 求最大子数组乘积] 这个求最大子数组乘积问题是由最大子数组之和问题演变而来,但是却比求最大子数组之和要复杂,因为在求和的 ...