题目描述
你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。
输入
输入如题义所述的一个一元一次方程。
输出
输出只有一个实数,为方程的解。
样例输入
6a-5+1=2-2a
样例输出
a=0.750
这道题是暑假做的第一道NOIP,应该说很快就把大部分搞好,但是由于不细致或者没想到,我改了好多个小时,忘了读数
这道题只要用纯模拟就OK了
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char a[101],c='2';
int main(){
float n,wzsz=0.0,qz=0.0;
int j=0;
scanf("%s",&a);
int len,blen;
len=strlen(a);
for(int i=0;i<len;i++){
if(a[i]=='=')blen=i;
if((c=='2')&&(a[i]!='+'&&a[i]!='-'&&a[i]!='='&&!(a[i]>='0'&&a[i]<='9')))c=a[i];
}
for(int i=0;i<len;i++){
n=0.0;
j=0;
while(a[i]>='0'&&a[i]<='9'){n=n*10+a[i]-'0';++i;j++;}
if(a[i]==c){
if((a[i-j-1]=='+'||i-j-1<0)&&i-j-1<blen)wzsz+=n;
if((a[i-j-1]=='+'||i-j-1<0||a[i-j-1]=='=')&&i-j-1>=blen)wzsz-=n;
if((a[i-j-1]=='-')&&i-j-1<blen)wzsz-=n;
if((a[i-j-1]=='-')&&i-j-1>blen)wzsz+=n;
}else{
if((a[i-j-1]=='+'||i-j-1<0)&&i-j-1<blen)qz-=n;
if((a[i-j-1]=='+'||i-j-1<0||a[i-j-1]=='=')&&i-1>=blen)qz+=n;
if((a[i-j-1]=='-')&&i-j-1<blen)qz+=n;
if((a[i-j-1]=='-')&&i-j-1>blen)qz-=n;
}
}
float sz=qz/wzsz;
// cout<<wzsz<<endl<<qz;
printf("%c=%.3f",c,sz);
return 0;
}