洛谷——P1022 计算器的改良

https://www.luogu.org/problem/show?pid=1022#sub

题目背景

NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。

题目描述

为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:

4+3x=8

6a-5+1=2-2a

-5+12y=0

ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“-”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。

你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。

输入输出格式

输入格式:

一个一元一次方程。

输出格式:

解方程的结果(精确至小数点后三位)。

输入输出样例

输入样例#1:
6a-5+1=2-2a
输出样例#1:
a=0.750


模拟是硬伤
 1 #include <algorithm>
 2 #include <cstring>
 3 #include <cstdio>
 4 
 5 using namespace std;
 6 
 7 int pos,flag;
 8 double num,num2;
 9 char ch,s[10000];
10 
11 int main()
12 {
13     scanf("%s",s); int n=strlen(s);
14     for(int i=0;i<n;i++) if(s[i]=='=') pos=i;
15     for(int i=0;i<n;i++,flag=0)
16     {
17         if(i==pos) continue;
18         if(i<pos)
19         {
20             int temp=0;
21             if(s[i-1]=='-') flag=1;
22             for(;i<n&&s[i]>='0'&&s[i]<='9';i++)
23                 temp=temp*10+s[i]-'0';
24             if(s[i]>='a'&&s[i]<='z')
25             {
26                 ch=s[i];
27                 if(flag) num-=temp;
28                 else num+=temp;
29             }
30             else
31             {
32                 if(flag) num2+=temp;
33                 else num2-=temp;
34             }
35         }
36         else 
37         {
38             int temp=0;
39             if(s[i-1]=='-') flag=1;
40             for(;i<n&&s[i]>='0'&&s[i]<='9';i++)
41                 temp=temp*10+s[i]-'0';
42             if(s[i]>='a'&&s[i]<='z')
43             {
44                 ch=s[i];
45                 if(flag) num+=temp;
46                 else num-=temp;
47             }
48             else
49             {
50                 if(flag) num2-=temp;
51                 else num2+=temp;
52             }
53         }
54     }
55     printf("%c=%.3lf",ch,num2/num);
56     return 0;
57 }
——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
原文地址:https://www.cnblogs.com/Shy-key/p/7201866.html