题目给的样例对了,但把 a 换成其他字母后输出就不一样了,而且换每个字母的结果都不一样。
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
string s,l[N],r[N];
string ans;
char zm[26]= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','r','l','q','r','s','t','u','v','w','x','y','z'};
int x=1,y=1,suml=0,sumr=0,suml2=0,sumr2=0;
bool pdzm(string s) { //判断是否是26个小写字母
for(int i=0; i<=s.size(); i++) {
for(int j=0; j<=25; j++) {
if(s[i]==zm[j]) {
ans=zm[j];
return true;
}
}
}
return false;
}
int zh(string s) { //把 形如:-34、+23、10的 字符串转成整型数字
if(s[0]!='-') {
char s1;
if(s[0]=='+') {
for(int i=1; i<=s.size(); i++) {
s1+=s[i];
}
} else {
for(int i=0; i<=s.size(); i++) {
s1+=s[i];
}
}
return s1-'0';
}
if(s[0]=='-') {
char s1;
for(int i=1; i<=s.size(); i++) {
s1+=s[i];
}
return (0-(s1-'0'));
}
}
string xs(string s) { //把 形如:-2a、3a的 字符串转成 前面的系数的字符串
string xs1;
for(int i=0; i<=s.size(); i++) {
if(s[i]!='a') {
xs1+=s[i];
}
}
if(s[s.size()]=='-'||s[s.size()]=='+') {
xs1+='1';
}
return xs1;
}
int main() {
// ios::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
cin>>s;
pdzm(s);
//把方程分解
for(int i=0; i<=s.size(); i++) {
if(i==0&&(s[i]=='+'||s[i]=='-')) {
l[x]+=s[i];
} else {
if(s[i]!='+'&&s[i]!='-'&&s[i]!='=') {
l[x]+=s[i];
}
if(s[i]=='+'||s[i]=='-') {
x++;
l[x]+=s[i];
}
if(s[i]=='=') {
y=1;
for(int j=i+1; j<=s.size(); j++) {
if(j==i+1&&(s[j]=='+'||s[j]=='-')) {
r[y]+=s[j];
} else {
if(s[j]!='+'&&s[j]!='-'&&s[j]!='=') {
r[y]+=s[j];
}
if(s[j]=='+'||s[j]=='-') {
y++;
r[y]+=s[j];
}
}
}
break;
}
}
}
for(int i=1; i<=x; i++) {
if(pdzm(l[i])==false) {
suml+=zh(l[i]);
}
if(pdzm(l[i])==true) {
suml2+=zh(xs(l[i]));
}
}
for(int i=1; i<=y; i++) {
if(pdzm(r[i])==false) {
sumr+=(0-zh(r[i]));
}
if(pdzm(r[i])==true) {
sumr2+=(0-zh(xs(r[i])));
}
}
double sum1=suml+sumr;
double sum2=suml2+sumr2;
double hhh=sum1/(0-sum2);
cout<<ans;
printf("=%.3f",hhh);
return 0;
}