16分求调,输出感觉都对啊
查看原帖
16分求调,输出感觉都对啊
1088732
GXZJQ楼主2024/9/9 20:06
#include <bits/stdc++.h>
using namespace std;
string s;
char c;
string s1, s2; //s1 表示等号左边,s2 表示等号右边
long long leftx, rightx, leftn, rightn;
char flag;

//将方程化为左右两边
void Depart() {
	bool fflag = false;
	for (int i = 0; i < s.length(); i++) {
		if (s[i] >= 'a' && s[i] <= 'z') c = s[i];
		if (s[i] == '=') {
			fflag = true;
			continue;
		}
		if (!fflag) s1 += s[i];
		if (fflag) s2 += s[i];
	}
}

//处理等式左边
void DealLeft() {
	flag = '+';
	for (int i = 0; i < s1.length(); i++) {
		long long num = 0;
		while (s1[i] >= '0' && s1[i] <= '9' && i < s1.length()) {
			num *= 10;
			num += s1[i] - '0';
			i++;
		}
		if (s1[i] == c) {
			if (num == 0) {
				if (flag == '+') leftx += 1;
				else leftx -= 1;
			} else {
				if (flag == '+') leftx += num;
				else leftx -= num;
			}
		}
		if (s1[i] == '-' || s1[i] == '+') {
			if (flag == '+') leftn += num;
			else leftn -= num;
			flag = s1[i];
		}
		if (i == s1.length()) {
			if (flag == '+') leftn += num;
			else leftn -= num;
		}
	}
}

//处理等式右边
void DealRight() {
	flag = '+';
	for (int i = 0; i < s2.length(); i++) {
		long long num = 0;
		while (s2[i] >= '0' && s2[i] <= '9' && i < s2.length()) {
			num *= 10;
			num += s2[i] - '0';
			i++;
		}
		if (s2[i] == c) {
			if (num == 0) {
				if (flag == '+') rightx += 1;
				else rightx -= 1;
			} else {
				if (flag == '+') rightx += num;
				else rightx -= num;
			}
		}
		if (s2[i] == '-' || s2[i] == '+') {
			if (flag == '+') rightn += num;
			else rightn -= num;
			flag = s2[i];
		}
		if (i == s2.length()) {
			if (flag == '+') rightn += num;
			else rightn -= num;
		}
	}
}

int main() {
	getline(cin, s);
	Depart();
//	cout << s1 << " " << s2 << endl;
	DealLeft();
//	cout << leftn << " " << leftx << endl;
	DealRight();
//	cout << rightn << " " << rightx << endl;
//	cout << leftx - rightx << "a= " << rightn - leftn << endl;
	if (rightn - leftn == 0) cout << c << "=0.000", exit(0);
	printf("%c=%.3f", c, (rightn - leftn - 0.0) / (leftx - rightx - 0.0));
	return 0;
}
/*
--------------------------------------------------------
样例 #1

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

样例输出 #1
a=0.750
--------------------------------------------------------
样例 #2

样例输入 #2
-x-x-x=x+1

样例输出 #2
x=-0.250
--------------------------------------------------------
样例 #3

样例输入 #3
x-x+11=x+1

样例输出 #3
x=10.000
--------------------------------------------------------
样例 #4

样例输入 #4
x+x=x+1-1+3+1-4

样例输出 #4
x=0.000
--------------------------------------------------------
样例 #5

样例输入 #5
1+x=1-1+3+1-4

样例输出 #5
x=-1.000
--------------------------------------------------------
*/
2024/9/9 20:06
加载中...