一 题目
习题3-1 得分(Score, ACM/ICPC Seoul 2005, UVa1585)
给出一个由O和X组成的串(长度为1~80),统计得分。每个O的得分为目前连续出现的O的个数,X的得分为0。例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3。
- #include <iostream>
- #include <string.h>
- using namespace std;
- #define maxn 10000
- char s[maxn];
- int main(int argc, char** argv) {
- int sum; int count=0;
- scanf("%s", &s);
- for(int i = 0; i < strlen(s); i++)
- { if(s[i]=='O') {
- count++;
- sum=sum+count;}
- else
- count=0;
- }
- printf("%d\n", sum);
- }
习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol。
- #include <iostream>
- #include <string.h>
- #include <stdlib.h>
- using namespace std;
- #define maxn 10000
- char s[maxn];
- int main(int argc, char** argv) {
- double sum=0; //sum 计算分子量
- char b[10]; //计算元素后面的数字
- scanf("%s", &s); //分子式
- for(int i=0;i<strlen(s);i++)
- { int t=0 ;
- int u=0;
- int k=i;
- memset(b,0,sizeof(b));
- int kk=0;
- while(s[k+1]!='C'&&s[k+1]!='H'&&s[k+1]!='N'&&s[k+1]!='O'&&k+1<strlen(s)){ //判断元素后面是否为数字
- b[u]=s[k+1];
- k++;
- u++;
- }
- kk=atoi(b); if(kk!=0) //atoi() 函数 把字符串转为整型 如果读到非数字则返回结果 如 atoi("13.14") 放回13
- kk=kk-1;
- if(s[i]=='C')
- sum=sum+12.01+kk*12.01;
- if(s[i]=='H')
- sum=sum+1.008+kk*1.008;
- if(s[i]=='O')
- sum+=16.00+kk*16.00;
- if(s[i]=='N')
- sum+=14.01+kk*14.01
- }
- printf("%lf\n", sum);}