给出一种物质的分子式,求分子量。只包含4种原子,分别为C,H,O,N。

【知识点】

1.ASCII码

【阿拉伯数字】48~57

【大写字母】65~90

【小写字母】97~122

2.输入循环到n-1的原因

因为我用的结束输入是enter+ctrlz+enter的结束方法,但是读入字符的话,会多一个enter。

->直接scanf("%s")就不会多一个enter,但是因为数组长度是n,而数组下标是从0开始,所以实际坐标是0到n-1.

【代码】

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char* list = "CHON";
float weight[] = {12.01, 1.008, 16.00, 14.01};
const int maxn = 100;
char s[maxn]; int get_loc(char a)
{
for (int i = 0; i < 4; i++)
{
if(a == list[i]) return i;
}
return -1;
} int main()
{
int T;
float sum = 0.0;
scanf("%d",&T);
while(T--)
{
scanf("%s",s);
printf("%s\n",s);
int n = strlen(s);
int loc;
//printf("%c\n",s[n-1]);
if( s[n-1]>=48 && s[n-1]<=57 ) //最后一位是数字
{
for(int i = 0; i < n ; i++) //可以读到最后一位
{
if (s[i] >= 65 && s[i]<= 90)
{
loc = get_loc(s[i]);
if (s[i + 1] >= 65 && s[i + 1]<= 90) //如果下一位是字母
{
sum += weight[loc];
}
else //如果下一位是数字
{
printf("IN%d\n",s[i+1]-48);
sum += (s[i+1]-48)*weight[loc];
//sum += int(s[i+1])*weight[loc];
}
}
}
}
else //最后一位是字母
{
for(int i = 0; i < n-1 ; i++) //少循环一位
{
if (s[i] >= 65 && s[i]<= 90)
{
loc = get_loc(s[i]);
if (s[i + 1] >= 65 && s[i + 1]<= 90) //如果下一位是字母
{ sum += weight[loc]; printf("1%f\n", sum);
}
else //如果下一位是数字
{
sum += (s[i+1]-48)*weight[loc];
printf("2%f\n", sum);
}
}
}
loc = get_loc(s[n-1]);
sum += weight[loc];
printf("3%f\n", sum);
}
}
printf("SUM %f",sum);
system ("pause");
}

【C/C++】习题3-2 分子量/算法竞赛入门经典/字符串的更多相关文章

  1. 【C/C++】习题3-4 周期串/算法竞赛入门经典/数组和字符串

    [题目] 如果某个字符串可以由长度为k的字符串重复多次得到,则称该串以k为周期. 输入一个长度不超过80的字符串,输出最小周期. [思路] 暴力求解.依次考察周期1~长度n. 筛选:周期一定是长度n的 ...

  2. 【C/C++】习题3-3 数数字/算法竞赛入门经典/数组和字符串

    [题目] 把前n个(n<=10000)的整数顺序写在一起:123456789101112-- 数一数0~9各出现多少次(输出10个整数,分别是0,1,2,--,9出现的次数) [解答] 暴力求解 ...

  3. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  4. [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...

  5. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  6. [刷题]算法竞赛入门经典 3-12/UVa11809

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...

  7. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  8. [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...

  9. [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...

随机推荐

  1. asp.net中HttpCookie操作cookie的方法

    微软对HttpCookie的定义为"提供创建和操作各 HTTP Cookie 的类型安全方法." HttpCookie的构造函数一共有两个 1.HttpCookie(String) ...

  2. OAuth 2.0 扩展协议之 PKCE

    前言 阅读本文前需要了解 OAuth 2.0 授权协议的相关内容, 可以参考我的上一篇文章 OAuth 2.0 的探险之旅. PKCE 全称是 Proof Key for Code Exchange, ...

  3. eclipse下的python环境安装

    添加python开发环境到eclipse:   点击help--install New Software 点击add,弹出新窗口: Name:填PyDev Location:填 http://pyde ...

  4. CodeBlocks调试器缺少(gdb.exe)文件

    错误如下: Building to ensure sources are up-to-date Selecting target:  Debug ERROR: You need to specify ...

  5. vs2012换肤功能,vs2012主题及自定义主题

    vs2012 默认的主题只有浅色和深色两种,深色太黑了,浅色又太亮了!怎么办? 研究不少时间终于找到了怎么编辑vs2012的皮肤 现在开始吧 打开vs2012-工具--扩展和更新 在联机中搜索 The ...

  6. [noi706]Sabotage

    先可以将所有出度为0的节点连向一个点,然后问题变为求到这个点的必经之点这其实是一道模板题,因为有一个东西叫做支配树容易发现一个点的必经之点都是一条链,其实可以把这条链上最浅的点作为这个点的父亲,那么一 ...

  7. 【2020五校联考NOIP #7】伟大的卫国战争

    题面传送门 题意: 数轴上有 \(n\) 个点,现在要在它们之间连 \(m\) 条边,第 \(i\) 条边连接 \(a_i,b_i\) 两个点. 现在你要钦定每条边连在数轴的上方还是下方,使得任意两条 ...

  8. Codeforces 1464F - My Beautiful Madness(树的直径)

    Codeforces 题面传送门 & 洛谷题面传送门 树上数据结构大杂烩(?) 首先考虑什么样的点能够在所有路径的 \(d\) 邻居的交集内.显然如果一个点在一条路径的 \(d\) 邻居内则必 ...

  9. 洛谷 P4887 -【模板】莫队二次离线(第十四分块(前体))(莫队二次离线)

    题面传送门 莫队二次离线 mol ban tea,大概是这道题让我第一次听说有这东西? 首先看到这类数数对的问题可以考虑莫队,记 \(S\) 为二进制下有 \(k\) 个 \(1\) 的数集,我们实时 ...

  10. UVA12267 Telephone Network

    UVA12267 Telephone Network nb tea. 注意到如果两个需要相互接通的请求 \(a,b\) 在某一层分别接了上下两个开关,那么接下来它们永远也无法接通了,因为上下两个开关是 ...