希望进题解!!!!!
查看原帖
希望进题解!!!!!
1082700
13783521740cy楼主2024/9/27 22:59
#include <bits/stdc++.h>
using namespace std;
string a=""/*副字符串*/,s=""/*主字符串*/,s1/*算式左边*/,s2/*算式右边*/;
string wz/*未知数*/,ss/*算式*/;
char ww/*判断是否为未知数*/,x/*辅助*/;
double dw/*等号位置*/,wei=0/*辅助切割*/,wzs=0/*未知数总数*/,sss=0/*算式总数*/;
double dan/*结果*/,aa/*未知数总数*/,bb/*算式总数*/;
int main(){
	ios::sync_with_stdio(0);/*加速*/ 
	cin.tie(0);cout.tie(0);/*加速*/ 
	while(cin>>x){/*循环输入*/ 
		a+=x;/*导入a库*/ 
	}
	for(int i=0;i<a.size();i++)if(a[i]!=' ')s+=a[i];/*去括号*/ 
	for(int i=0;i<s.size();i++)if(s[i]=='=')dw=i;/*找等号的位置*/ 
	s1=s.substr(0,dw);/*等号左边*/ 
	s2=s.substr(dw+1,s.size()-dw);/*等号右边*/ 
	if(s1[0]!='-')s1='+'+s1;/*添加前缀*/ 
	if(s2[0]!='-')s2='+'+s2;/*添加前缀*/
	s1=s1+'+';/*添加后缀*/
	s2=s2+'+';/*添加后缀*/
	for(int i=1;i<s1.size();i++){
		if(s1[i]=='+'||s1[i]=='-'){
			string sa/*辅助切割*/;
			sa=s1.substr(wei,i-wei);/*切割*/ 
			wei=i;/*加号减号位置*/ 
			int w=0;
			for(int j=0;j<sa.size();j++)if(sa[j]>='a'&&sa[j]<='z')w=1;/*确认未知数*/ 
			if(!w){
				if(sa[0]=='+')sa[0]='-';/*转号*/ 
				else sa[0]='+';
				ss+=sa;/*加到ss库里*/ 
			}
			else{
				wz+=sa;/*加到wz库里*/
			}
		}
	}
	wei=0;
	for(int i=1;i<s2.size();i++){
		if(s2[i]=='+'||s2[i]=='-'){
			string sb/*辅助切割*/;
			sb=s2.substr(wei,i-wei);/*切割*/
			wei=i;/*加号减号位置*/ 
			int w=0;
			for(int j=0;j<sb.size();j++)if(sb[j]>='a'&&sb[j]<='z')w=1;/*确认未知数*/ 
			if(!w){
				ss+=sb;/*加到ss库里*/ 
			}
			else{
				if(sb[0]=='+')sb[0]='-';/*转号*/ 
				else sb[0]='+';
				wz+=sb;/*加到wz库里*/
			}
		}
	}
	wz+='+',ss+='+';/*添加后缀*/ 
	wei=0;
	for(int i=1;i<ss.size();i++){
		if(ss[i]=='+'||ss[i]=='-'){
			string sc/*辅助切割*/;
			sc=ss.substr(wei,i-wei);/*切割*/ 
			wei=i;/*加号减号位置*/ 
			int n=0/*总数*/;
			for(int j=1;j<sc.size();j++){/*字符串转整数类型*/
				n=n*10+(sc[j]-'0');
			}
			if(sc[0]=='-')sss-=n;/*判断加还是减*/ 
			else sss+=n;
		}
	}
	wei=0;
	for(int i=1;i<wz.size();i++){
		if(wz[i]=='+'||wz[i]=='-'){
			string sd/*辅助切割*/;
			sd=wz.substr(wei,i-wei);/*切割*/ 
			ww=sd[sd.size()-1];/*判断未知数字母*/ 
			wei=i;/*加号减号位置*/ 
			int m=0/*总数*/;
			if(sd.size()<=2){/*判断隐藏单位1*/ 
				char y/*辅助判断隐藏单位1*/,z/*辅助判断隐藏单位1*/;
				y=sd[0];
				z=sd[1];
				sd="";
				sd+=y;
				sd+='1';
				sd+=z;
			}
			for(int j=1;j<sd.size()-1;j++){/*字符串转整数类型*/ 
				m=m*10+(sd[j]-'0');
			}
			if(sd[0]=='-')wzs-=m;/*判断加还是减*/ 
			else wzs+=m;
		}
	}
	aa=sss;/*转换*/ 
	bb=wzs;/*转换*/ 
	if(aa==0||bb==0)dan=0;/*判断是否出现-0.000,例:(第五题-a+1a-3=a-3)*/
	else dan=aa/bb;
	printf("%c=%0.3lf",ww,dan);/*输出一个字符一个double类型的*/ 
	return 零;/*再见*/
}
2024/9/27 22:59
加载中...