1 条题解
-
0
#include <bits/stdc++.h> using namespace std; struct num { bool isUnknown = false; int N; string toString(){ stringstream ss; ss<<N; if(isUnknown){ ss<<"x"; } return ss.str(); } }; vector<char> v,vl,vr; vector<num> nl,nr; char unknownC; int main(){ char c; while (scanf("%c",&c)!=EOF) { v.push_back(c); } for(int i = 0;i<v.size();i++){ if(v[i]=='='){ for(int j = i + 1;j<v.size();j++){ if(j == i + 1 &&v[j]!='-'){ vl.push_back('+'); } vr.push_back(v[j]); } break; } if(i == 0 &&v[i]!='-'){ vl.push_back('+'); } vl.push_back(v[i]); } bool isFu = false; vector<int> numBuffer; for(int i = 0;i<vl.size();i++){ num n; char curC = vl[i]; //cout<<"AT:"<<i; if(curC == '-'){ int curN = 0; int K = 1; for(int j = numBuffer.size()-1;j>=0;j--){ curN += (numBuffer[j]*K); K*=10; } if(isFu == true){ curN *= -1; } n.N = curN; if(n.N != 0){ nl.push_back(n); } isFu = true; numBuffer.clear(); } else if(curC == '+'){ int curN = 0; int K = 1; for(int j = numBuffer.size()-1;j>=0;j--){ curN += (numBuffer[j]*K); K*=10; } if(isFu == true){ curN *= -1; } n.N = curN; if(n.N != 0){ nl.push_back(n); } isFu = false; numBuffer.clear(); //cout<<"Start R"; } else if(curC >= '0' && curC <= '9'){ numBuffer.push_back(curC - '0'); } else if(curC >= 'a'&&curC<='z'){ //cout<<"Find Unk:"<<curC<<endl; unknownC = curC; int curN = 0; int K = 1; for(int j = numBuffer.size()-1;j>=0;j--){ curN += (numBuffer[j]*K); K*=10; } if(isFu == true){ curN *= -1; } n.N = curN; if(n.N == 0){ n.N = 1; } n.isUnknown = true; if(n.N != 0){ //cout<<"Push Unk:"<<nl.size()<<endl; nl.push_back(n); } numBuffer.clear(); } if(i == vl.size()-1){ int curN = 0; int K = 1; for(int j = numBuffer.size()-1;j>=0;j--){ curN += (numBuffer[j]*K); K*=10; } if(isFu == true){ curN *= -1; } n.N = curN; if(n.N != 0){ nl.push_back(n); } numBuffer.clear(); break; } } //Read Right isFu = false; numBuffer.clear(); for(int i = 0;i<vr.size();i++){ num n; char curC = vr[i]; //cout<<"AT:"<<i; if(curC == '-'){ int curN = 0; int K = 1; for(int j = numBuffer.size()-1;j>=0;j--){ curN += (numBuffer[j]*K); K*=10; } if(isFu == true){ curN *= -1; } n.N = curN; if(n.N != 0){ nr.push_back(n); } isFu = true; numBuffer.clear(); } else if(curC == '+'){ int curN = 0; int K = 1; for(int j = numBuffer.size()-1;j>=0;j--){ curN += (numBuffer[j]*K); K*=10; } if(isFu == true){ curN *= -1; } n.N = curN; if(n.N != 0){ nr.push_back(n); } isFu = false; numBuffer.clear(); //cout<<"Start R"; } else if(curC >= '0' && curC <= '9'){ numBuffer.push_back(curC - '0'); } else if(curC >= 'a'&&curC<='z'){ unknownC = curC; //cout<<"Find Unk:"<<curC<<endl; int curN = 0; int K = 1; for(int j = numBuffer.size()-1;j>=0;j--){ curN += (numBuffer[j]*K); K*=10; } if(isFu == true){ curN *= -1; } n.N = curN; if(n.N == 0){ n.N = 1; } n.isUnknown = true; if(n.N != 0){ //cout<<"Push Unk:"<<nl.size()<<endl; nr.push_back(n); } numBuffer.clear(); } if(i == vr.size()-1){ int curN = 0; int K = 1; for(int j = numBuffer.size()-1;j>=0;j--){ curN += (numBuffer[j]*K); K*=10; } if(isFu == true){ curN *= -1; } n.N = curN; if(n.N != 0){ nr.push_back(n); } numBuffer.clear(); break; } } //cout<<vl[1]; //cout<<nr[0].toString(); //Move All unknown to left float unknownXi = 0; float Sum = 0; for(int i = 0;i<nl.size();i++){ if(nl[i].isUnknown){ unknownXi += (float)nl[i].N; } } for(int i = 0;i<nr.size();i++){ if(nr[i].isUnknown){ unknownXi -= (float)nr[i].N; } } for(int i = 0;i<nl.size();i++){ if(!nl[i].isUnknown){ Sum -= (float)nl[i].N; //cout<<"Cut:"<<nl[i].N<<endl; } } for(int i = 0;i<nr.size();i++){ if(!nr[i].isUnknown){ Sum += (float)nr[i].N; //cout<<"Add:"<<nr[i].N<<endl; } } float ans = (Sum/unknownXi); //cout<<unknownXi; //cout<<ans; cout<<unknownC<<"="; printf("%.3f",ans); }
信息
- ID
- 521
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 71
- 已通过
- 17
- 上传者