【C/C++】习题3-2 分子量/算法竞赛入门经典/字符串
给出一种物质的分子式,求分子量。只包含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 分子量/算法竞赛入门经典/字符串的更多相关文章
- 【C/C++】习题3-4 周期串/算法竞赛入门经典/数组和字符串
[题目] 如果某个字符串可以由长度为k的字符串重复多次得到,则称该串以k为周期. 输入一个长度不超过80的字符串,输出最小周期. [思路] 暴力求解.依次考察周期1~长度n. 筛选:周期一定是长度n的 ...
- 【C/C++】习题3-3 数数字/算法竞赛入门经典/数组和字符串
[题目] 把前n个(n<=10000)的整数顺序写在一起:123456789101112-- 数一数0~9各出现多少次(输出10个整数,分别是0,1,2,--,9出现的次数) [解答] 暴力求解 ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- [刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...
- [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...
随机推荐
- airflow 安装问题
sasl Debian/Ubuntu: apt-get install python-dev libsasl2-dev gcc CentOS/RHEL: yum install gcc-c++ pyt ...
- 第一课 Dubbo背景及原理
1 . 技术背景 Dubbo每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于 ...
- Exploring Matrix
import java.util.Scanner; public class J714 { /** * @taking input from user */ public static void ma ...
- [loj3524]钥匙
由于到达关系具有传递性,可以考虑不断将若干个可以相互到达的点缩点,并且当两个点只能单向到达时,能到达另一个点的点一定不是最小值 由此,我们来考虑dfs,即不断从一个节点开始,遍历其可以到达的点,当发现 ...
- [luogu3334]抛硬币
(数据范围的公式渲染有一些问题,大概是$a\le b\le 100$) 同洛谷4548,推导过程省略,直接给出答案-- 令$p_{H}=\frac{b}{a}$,$p_{T}=\frac{b}{b-a ...
- 微服务改造之Openfeign的强化插件
在接触 Spring Cloud 这套框架之前,笔者使用的一直是Dubbo.在转型到Spring Cloud 后,发现了一个很郁闷的问题.Spring Cloud 中的 Openfeign,相比于 D ...
- 架构师必备:巧用Canal实现异步、解耦的架构
本文介绍如何应用Canal实现异步.解耦的架构,后续有空再写文章分析Canal原理和源代码. Canal简介 Canal是用来获取数据库变更的中间件. 伪装自己为MySQL从库,拉取主库binlog并 ...
- CSS-sprit 雪碧图
CSS-sprit 雪碧图 可以将 多个小图片统一保存到一个大图片中,然后通过调整background-position来显示响应的图片 这样图片会同时加载到网页中 就可以避免出现闪烁 ...
- 记一次 android 线上 oom 问题
背景 公司的主打产品是一款跨平台的 App,我的部门负责为它提供底层的 sdk 用于数据传输,我负责的是 Adnroid 端的 sdk 开发. sdk 并不直接加载在 App 主进程,而是隔离在一个单 ...
- Codeforces 1365G - Secure Password(思维题)
Codeforces 题面传送门 & 洛谷题面传送门 首先考虑一个询问 \(20\) 次的方案,考虑每一位,一遍询问求出下标的这一位上为 \(0\) 的位置上值的 bitwise or,再一遍 ...