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. ASP.Net Chart Control -----Bar and Column Charts

    StackedBar  StackedColumn StackedArea <asp:CHART id="Chart1" runat="server" H ...

  2. HDU 4085 斯坦纳树

    题目大意: 给定无向图,让前k个点都能到达后k个点(保护地)中的一个,而且前k个点每个需要占据后k个中的一个,相互不冲突 找到实现这个条件达到的选择边的最小总权值 这里很容易看出,最后选到的边不保证整 ...

  3. 应用程序池“Classic .NET AppPool”将被自动禁用

    原文:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28972779&id=3868008 服务器 Server 20 ...

  4. [转] Android应用程序与SurfaceFlinger服务的关系概述和学习计划

    转自:Android应用程序与SurfaceFlinger服务的关系概述和学习计划 SurfaceFlinger服务负责绘制Android应用程序的UI,它的实现相当复杂,要从正面分析它的实现不是一件 ...

  5. 关于Json处理的两个实例

    <script> var value1="{\"layer_datum\":{\"holdId\":\"dcdm\", ...

  6. ubuntu下openoffice开发环境配置

    安装openoffice或者liboffice 路径:/usr/lib/openoffice/program ,soffice 开启服务: 安装JDK 其默认路径:jdk7 版本号:1.7...,jd ...

  7. 将salt取到的数据处理

    #!/usr/bin/env python #coding:utf-8 import json with open('minfo') as f,open('minfoMiddle','w') as f ...

  8. UVA11624(bfs)

    题意:给一张图,有火源,有障碍物,剩下的是道路,火源在下一分钟能够让上下左右四个方向的道路也着火,告诉人的位置,问最短时间能逃出去的时间是多少: 思路:一个bfs用来求出所有的火源能蔓延到的地方,另一 ...

  9. JQuery源码分析(八)

    jQuery的each迭代器 jQuery的each方法从使用上就要分2种情况: $.each()函数 $(selector).each() $.each()函数和$(selector).each() ...

  10. IOS 作业项目(4)步步完成 画图 程序(中)

    一,承接上文,继续本文  [UIButton buttonWithType:UIButtonTypeRoundedRect]; 如此声明的按钮才会有点击闪动的效果!如果直接frame方式声明就不会有. ...