#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
double C = 12.01, H = 1.008, O = 16.00, N = 14.01;
double z;
int w;
double sum = 0.0;
char x[100];
cin >> x;
for (int i = 0; x[i]; i++) {
if (x[i] == 'C') {
z = C;
}
else if (x[i] == 'H') {
z = H;
}
else if (x[i] == 'O')
{
z = O;
}
else if (x[i] == 'N') {
z = N;
}
if ((x[i + 1] - '0') > =1 && (x[i + 1] - '0' <= 9)) {
w = x[i + 1] - '0';
i++;
if ((x[i + 1] - '0') >= 1 && (x[i + 1] - '0') <= 9) {
w = w * 10 + (x[i + 1] - '0');
i++;
}
}
else { w = 1; }
sum += w * z;
}
cout << fixed << setprecision(3) << sum << endl;
}
return 0;
}
也是改了小两天,然后说一下核心代码逻辑两大块的核心
第一个是有四个字母然后把for循环中匹配到的字母进行确认到z里面后面进行
第一大逻辑
第二的大逻辑就行下面的if那个三大判断条件第一个是一位数并且是大于1的小于10的
x然后是大于10的就是二位数
第三个就是没有数字的就是1的
然后代码具体要考虑i++每次进行i++自动i++这样避免算完字母后碰到数字然后会多算一次字母。就是一位算数字后i++如果【i+2】就是匹配到两位数的话再次i++;这样可以有效避免数字越界(你可以好好思考一下)如果都没有就是1直接定义1即可。好了没了感谢观看。