UVa 1586

  题目大意:给出一种物质的分子式(不带括号),求分子量。本题中分子式只包含4种原子,分别为C、H、O、N,

       原子量分别为12.01,1.008,16.00,14.01

  解题思路:先实现一个从字符型的数到整型的数的转换函数,再将输入的串从头到尾扫描,遇到字母,则进一步扫描后面的数字的区间,

       再调用函数进行转换,再乘以其的原子质量,最后累加到sum中即可。

/* UVa 1586 Molar mass --- 水题 */
#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <map>
using namespace std; char s[];
map<char, double> m; /*
@function:将区间[p, q)的数字转换成整型的数并返回
@param:左闭右开区间[p,q)
@return:返回转换的结果
*/
int fun(char* p, char* q){
//说明传进来
if (p >= q){
return ;
}
int num = , term = ; while (p < q){
num = num* + (*p-'');
++p;
}//while(p q) return num;
} int main()
{
#ifdef _LOCAL
freopen("D:\\input.txt", "r", stdin);
#endif //定义相应字母的映射值
m['C'] = 12.01;
m['H'] = 1.008;
m['O'] = 16.00;
m['N'] = 14.01;
int t;
scanf("%d", &t);
while (t--){
scanf("%s", s);
int i = ;
double sum = 0.0;
while (s[i] != ){
//i处是字母
if (isalpha(s[i])){ int j = i + ; //j指向下一位
while (isdigit(s[j])){
++j;
}//j一直+1直到j指向字母 //两个字母之间即为数据 [i+1, j)区间即表示数字
//注意也有可能字母之后立即跟上字母,此时i+1 = j, 因此函数需要返回1
int t = fun(s + i + , s + j);
sum += t*m[s[i]];
i = j;
}
}//s[i]
printf("%.3f\n", sum);
} return ;
}

UVa 1586 Molar mass --- 水题的更多相关文章

  1. uva 1586 Molar mass(Uva-1586)

    这题做的相当的复杂...之前做的现在应该能简单一点了写的. 我的代码: #include <bits/stdc++.h> using namespace std; main() { int ...

  2. UVa 1586 Molar mass

    题意:给出物质的分子式,计算它的相对原子质量 因为原子的个数是在2到99之间的,所以找出一个是字母之后,再判断一下它的后两位就可以找出这种原子的个数了 #include<iostream> ...

  3. UVa 1586 - Molar Mass - ACM/ICPC Seoul 2007 - C语言

    关键在于判断数字是两位数还是单位数,其他部分没有难度. #include"stdio.h" #include"string.h" #include"c ...

  4. UVa 1339 Ancient Cipher --- 水题

    UVa 1339 题目大意:给定两个长度相同且不超过100个字符的字符串,判断能否把其中一个字符串重排后,然后对26个字母一一做一个映射,使得两个字符串相同 解题思路:字母可以重排,那么次序便不重要, ...

  5. UVa 1225 Digit Counting --- 水题

    UVa 1225 题目大意:把前n(n<=10000)个整数顺次写在一起,12345678910111213...,数一数0-9各出现多少字 解题思路:用一个cnt数组记录0-9这10个数字出现 ...

  6. UVa 272 Tex Quotes --- 水题

    题目大意:在TeX中,左引号是 ``,右引号是 ''.输入一篇包含双引号的文章,你的任务是把他转成TeX的格式 解题思路:水题,定义一个变量标记是左引号还是右引号即可 /* UVa 272 Tex Q ...

  7. UVa 1583 Digit Generator --- 水题+打表

    UVa 1583 题目大意:如果x加上x的各个数字之和得到y,那么称x是y的生成元. 给定数字n,求它的最小生成元 解题思路:可以利用打表的方法,提前计算出以i为生成元的数,设为d,并保存在a[d]中 ...

  8. UVa 1584 Circular Sequence --- 水题

    UVa 1584 题目大意:给定一个含有n个字母的环状字符串,可从任意位置开始按顺时针读取n个字母,输出其中字典序最小的结果 解题思路:先利用模运算实现一个判定给定一个环状的串以及两个首字母位置,比较 ...

  9. UVa 10970 - Big Chocolate 水题 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

随机推荐

  1. jstl c:choose>、<c:when>和<c:otherwise>标签

    <c:choose>.<c:when>和<c:otherwise>在一起连用,可以实现Java语言中的if-else语句的功能.例如以下代码根据username请求 ...

  2. 安装xampp后,遇到的各种问题

    一.apache无法启动 1.查看端口是否被占用 80端口冲突,解决方法:打开目录C:\xampp\apache\conf(我的安装目录为C:\xampp)下的httpd.conf文件,将Listen ...

  3. spark1.3.1安装和集群的搭建

    由于越来越多的人开始使用spark计算框架了,而且spark计算框架也是可以运行在yarn的平台上,因此可以利用单个集群,运行多个计算框架.这是一些大公司都是这么干的.好了,下面讲一下spark1.3 ...

  4. CSS引入方式的区别详解

    在web前端开发中,CSS是一种用来表现HTML或XML等文件样式的语言.很多处于web前端初学阶段的朋友,很多人都不知道CSS引入方式存在三种方法,css引入方式分别为标签内联书写.页面头部书写.外 ...

  5. 自适应label的高度

    iOS7以下的系统可使用方法 //获得当前cell高度 CGRect frame = [self frame]; //文本赋值 self.introduction.text = text; //设置l ...

  6. hdu 2061

    PS:  以为找个简单来恢复信心..结果碰到那么傻逼的题目... 题意:给出学分和成绩,算GPA...关键是注意换行....它要求的换行我觉得超级奇怪...除了第一个正常,其他的输入完之后先一个换行. ...

  7. Access数据库参数没值

    OleDbParameter[] par = { new OleDbParameter(Par_Password,Info.Password), new OleDbParameter(Par_StuN ...

  8. RTL2832U+R820电视棒跟踪飞机轨迹教程(ADS-B)

    Ubuntu 14.04.3 amd64 apt-get install git apt--dev 安装rtl-sdr git clone git://git.osmocom.org/rtl-sdr. ...

  9. iOS探索:对NSArray中自定义的对象进行排序

    http://mobile.51cto.com/hot-434804.htm 我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中.例如一个音乐程序可能会有一个Song类,聊天 ...

  10. error: Apostrophe not preceded by \

    解决方案为:在编译出错提示中找到相关的string.xml文档,在string标签中的字符串含有单引号(')前面,加上反斜杠(\)转义即可.