爆0 求助
查看原帖
爆0 求助
468872
The_43_Bachelor楼主2024/10/20 11:53

题目给的样例对了,但把 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;
}
2024/10/20 11:53
加载中...