数组和字符串例题

(持续更新)
list:
1:Score (ACM/ICPC Seoul2007,UVa1586)

=================================================================

1:Score

(ACM/ICPC Seoul2007,UVa1586)

给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分 别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,C6H5OH的 分子量为94.108g/mol.

分析:

题目中所说的原子只有4种,可以用数组存储,建立起原子和原子量的关系。
最基本的是要对数字和原子进行区别处理。
分子式的计算需要注意到原子后面是否跟了数字,如果是数字就需要乘以数字前面的原子值。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<stdio.h>
#include<string.h>
char s[1024];
int main(){
double a[128];
a['C']=12.01;
a['H']=1.008;
a['O']=16.00;
a['N']=14.01;
int testcase;
scanf("%d",&testcase);
while(testcase--){
scanf("%s",s);//notice
int n=strlen(s);
double result=0;
for(int i=0;i<n;){
int ele=s[i];
int num=0;
i++;
if(s[i]>='0'&&s[i]<='9'){
num=num*10+s[i]-'0';
i++;
}
if(num==0)
num=1;
result+=a[ele]*num;
}
printf("%.3lf\n",result);
}
return 0;
}

注意:

数组的一些基本的操作。strlen()
数组在不同的地方定义影响不同。在mian函数外和在main函数里定义的区别。
for()循环语句的灵活使用。
a[‘C’]中的C用的是ASCII码.