P1022 计算器的改良网页链接P1022 计算器的改良题目背景NCL 是一家专门从事计算器改良与升级的实验室最近该实验室收到了某公司所委托的一个任务需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手 ZL 先生。题目描述为了很好的完成这个任务ZL 先生首先研究了一些一元一次方程的实例4 3 x 8 43x843x8。6 a − 5 1 2 − 2 a 6a-512-2a6a−512−2a。− 5 12 y 0 -512y0−512y0。ZL 先生被主管告之在计算器上键入的一个一元一次方程中只包含整数、小写字母及、-、这三个数学符号当然符号“-”既可作减号也可作负号。方程中并没有括号也没有除号方程中的字母表示未知数。你可假设对键入的方程的正确性的判断是由另一个程序员在做或者说可认为键入的一元一次方程均为合法的且有唯一实数解。输入格式一个一元一次方程。输出格式解方程的结果精确至小数点后三位。输入输出样例 #1输入 #16a-512-2a输出 #1a0.750解题思路本题核心是通过逐字符解析方程分离未知数项和常数项的系数进而求解一元一次方程遍历方程的每个字符用now标记等号左右侧左侧为1右侧为-1f标记当前符号为1、-为-1x累计数字值k记录未知数总系数b记录常数项总系数遇到/-/符号时将累计的数字/未知数项计入对应系数并重置状态遇到字母时识别为未知数并累计其系数遍历结束后通过一元一次方程公式解 -b/k计算结果处理-0.0的特殊情况后保留三位小数输出。该方法线性遍历方程字符时间复杂度O(L)L为方程长度适配合法一元一次方程的解析需求精准求解并按格式输出。总结核心逻辑逐字符解析方程分离等号两侧的未知数系数和常数项系数利用一元一次方程公式求解。关键操作用状态变量标记符号、等号侧、累计数字识别未知数并统计系数最后计算并格式化输出解。效率保障线性遍历方程字符无冗余计算适配合法一元一次方程的解析场景。代码内容#includebits/stdc.husingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvectorvectorllvt;typedefpairll,llpll;constll N1e610;constll mod1e97;constll INF1e18;charc,a;intf1,now1,k,b,x;boolr;intmain(){while(cinc){if(c-){bnow*f*x;x0;f-1;r0;}if(c){bnow*f*x;x0;f1;r0;}if(c){bnow*f*x;x0;f1;now-1;r0;}if(cacz){if(r){know*f*x;x0;}elseknow*f;ac;r0;}if(c0c9){xx*10c-0;r1;}}bnow*f*x;doubleansdouble(-b*1.0/k);if(ans-0.0)ans0;printf(%c%.3lf,a,ans);return0;}
P1022 计算器的改良【洛谷算法习题】
P1022 计算器的改良网页链接P1022 计算器的改良题目背景NCL 是一家专门从事计算器改良与升级的实验室最近该实验室收到了某公司所委托的一个任务需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手 ZL 先生。题目描述为了很好的完成这个任务ZL 先生首先研究了一些一元一次方程的实例4 3 x 8 43x843x8。6 a − 5 1 2 − 2 a 6a-512-2a6a−512−2a。− 5 12 y 0 -512y0−512y0。ZL 先生被主管告之在计算器上键入的一个一元一次方程中只包含整数、小写字母及、-、这三个数学符号当然符号“-”既可作减号也可作负号。方程中并没有括号也没有除号方程中的字母表示未知数。你可假设对键入的方程的正确性的判断是由另一个程序员在做或者说可认为键入的一元一次方程均为合法的且有唯一实数解。输入格式一个一元一次方程。输出格式解方程的结果精确至小数点后三位。输入输出样例 #1输入 #16a-512-2a输出 #1a0.750解题思路本题核心是通过逐字符解析方程分离未知数项和常数项的系数进而求解一元一次方程遍历方程的每个字符用now标记等号左右侧左侧为1右侧为-1f标记当前符号为1、-为-1x累计数字值k记录未知数总系数b记录常数项总系数遇到/-/符号时将累计的数字/未知数项计入对应系数并重置状态遇到字母时识别为未知数并累计其系数遍历结束后通过一元一次方程公式解 -b/k计算结果处理-0.0的特殊情况后保留三位小数输出。该方法线性遍历方程字符时间复杂度O(L)L为方程长度适配合法一元一次方程的解析需求精准求解并按格式输出。总结核心逻辑逐字符解析方程分离等号两侧的未知数系数和常数项系数利用一元一次方程公式求解。关键操作用状态变量标记符号、等号侧、累计数字识别未知数并统计系数最后计算并格式化输出解。效率保障线性遍历方程字符无冗余计算适配合法一元一次方程的解析场景。代码内容#includebits/stdc.husingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvectorvectorllvt;typedefpairll,llpll;constll N1e610;constll mod1e97;constll INF1e18;charc,a;intf1,now1,k,b,x;boolr;intmain(){while(cinc){if(c-){bnow*f*x;x0;f-1;r0;}if(c){bnow*f*x;x0;f1;r0;}if(c){bnow*f*x;x0;f1;now-1;r0;}if(cacz){if(r){know*f*x;x0;}elseknow*f;ac;r0;}if(c0c9){xx*10c-0;r1;}}bnow*f*x;doubleansdouble(-b*1.0/k);if(ans-0.0)ans0;printf(%c%.3lf,a,ans);return0;}