普通模拟,对于三长一段,三短一长的两种情况进行特殊判断,这里写的是:
- 三长一短,最短的小于其他三个,其他三个关系可以是小于大于等于
- 三短一长,最长的大于其他三个,其他三个关系可以是小于大于等于
其他情况都是参差不齐
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while(t--) {
string a, b, c, d;
cin >> a >> b >> c >> d;
int alen = a.size() - 2, blen = b.size() - 2, clen = c.size() - 2, dlen = d.size() - 2;
vector<int> p;
p.emplace_back(alen), p.emplace_back(blen), p.emplace_back(clen), p.emplace_back(dlen);
sort(p.begin(), p.end());
if(p[1] > p[0] && p[1] <= p[2] && p[2] <= p[3]) {
if(p[0] == alen)
cout << "A\n";
if(p[0] == blen)
cout << "B\n";
if(p[0] == clen)
cout << "C\n";
if(p[0] == dlen)
cout << "D\n";
} else if(p[0] <= p[1] && p[1] <= p[2] && p[2] < p[3]) {
if(p[3] == alen)
cout << "A\n";
if(p[3] == blen)
cout << "B\n";
if(p[3] == clen)
cout << "C\n";
if(p[3] == dlen)
cout << "D\n";
} else
cout << "C\n";
}
return 0;
}
将方程式分为左边和右边两个部分,分别计算记录左右两边各自的符号数值和与常数数值和。再对结果为零的两种情况分别进行特判,最后按照要求输出结果即可。
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
//左边符号前的数值和 左边的常数数值和
int lefta = 0, num2 = 0;
//右边符号前的数值和 右边的常数数值和
int righta = 0, num4 = 0;
int idx = 0;
bool neg = false;
int sum = 0;
char letters;
//统计等号左边的符号前数值和常数数值和
for(int i = 0; i < s.size(); i++) {
//如果为等号,说明方程左边结束
if(s[i] == '=') {
idx = i;
break;
}
//如果是数字,统计数字大小
if(s[i] >= '0' && s[i] <= '9') {
if(i > 0) {
if(s[i - 1] == '-')
neg = true;
}
while(i < s.size() && s[i] >= '0' && s[i] <= '9')
sum = sum * 10 + s[i] - '0', i += 1;
if(neg)
sum = sum * (-1);
//如果是符号前的数值 否则是常数数值
if(i < s.size() && s[i] >= 'a' && s[i] <= 'z')
lefta += sum, letters = s[i];
else
num2 += sum;
sum = 0;
neg = false;
i -= 1;
}
}
//方程式右边,处理操作同上
for(int i = idx + 1; i < s.size(); i++) {
if(s[i] >= '0' && s[i] <= '9') {
if(i > idx + 1) {
if(s[i - 1] == '-')
neg = true;
}
while(i < s.size() && s[i] >= '0' && s[i] <= '9')
sum = sum * 10 + s[i] - '0', i += 1;
if(neg)
sum = sum * (-1);
if(i < s.size() && s[i] >= 'a' && s[i] <= 'z')
righta += sum, letters = s[i];
else
num4 += sum;
sum = 0;
neg = false;
i -= 1;
}
}
//如果符号数值和常数数值有一个两边相等,进行特判
if(righta == lefta || num2 == num4) {
printf("%c=0.000\n", letters);
return 0;
}
printf("%c=%.3lf\n",letters ,1.0 *(num2 - num4) / (1.0 * (righta - lefta)));
return 0;
}