这道题首先设定一个二维数组,第一层是字符串,第二层则用于表示对应字符。如果是字母,则为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("%.3fn", 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 }

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!