这道题首先设定一个二维数组,第一层是字符串,第二层则用于表示对应字符。如果是字母,则为0,如果是数字,则会根据数字出现的次数,依次加一。
之后根据这个二位数组就可以很容易的计算出所要的结果。
示例代码如下:
1 #include<stdio.h> 2 #include<string.h> 3 #include<ctype.h> 4 #include<math.h> 5 #define maxn 105 6 7 float mass[4] = { 12.01,1.008,16.00,14.01 }; 8 char s[2][maxn]; 9 10 int summ(char(*s)[maxn], int m); 11 int main1() 12 { 13 int T = 0; 14 scanf("%d", &T); 15 16 while (T--) { 17 memset(s, 0, sizeof(s)); 18 scanf("%s", s); 19 20 float sum = 0; 21 int i, j; 22 23 for (j = 1; j<strlen(s[0]); j++) { 24 if (isalpha(s[0][j])) continue; 25 if (isalpha(s[0][j - 1])) s[1][j] = 1; 26 else s[1][j] = s[1][j - 1] + 1; 27 } 28 29 for (i = 0; i<strlen(s[0]); i++) { 30 if (!s[1][i]) { 31 switch (s[0][i]) { 32 case 'C': sum += mass[0]; break; 33 case 'H': sum += mass[1]; break; 34 case 'O': sum += mass[2]; break; 35 case 'N': sum += mass[3]; break; 36 } 37 } 38 else { 39 if (s[1][i + 1]) { 40 continue; 41 } 42 switch (s[0][i - s[1][i]]) { 43 case 'C': sum = sum + mass[0] * (summ(s, i)-1); break; 44 case 'H': sum = sum + mass[1] * (summ(s, i)-1); break; 45 case 'O': sum = sum + mass[2] * (summ(s, i)-1); break; 46 case 'N': sum = sum + mass[3] * (summ(s, i)-1); break; 47 } 48 } 49 } 50 51 printf("%.3f\n", sum); 52 } 53 return 0; 54 } 55 56 int summ(char (*s) [maxn], int m) { 57 int sum = 0; 58 int k; 59 for (k = 0; k<s[1][m]; k++) { 60 sum = sum + (s[0][m-k] -'0')* pow(10, k); 61 } 62 63 return sum; 64 }