【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 ...
随机推荐
- 什么?还在用delete删除数据《死磕MySQL系列 九》
系列文章 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 七.字符串可以这样加索引,你知吗?& ...
- Oracle中对数字加汉字的排序
需求:有一列NAME, varchar2类型,内容如下 以上就是已经按order by name进行排序的,但不是我们想要的结果 现在需要只按数字进行排序 第一步:抽取数字由于数字有是一位的有是两位的 ...
- 『学了就忘』Linux软件包管理 — 42、对RPM软件包的查询操作
目录 1.查询RPM软件包是否安装 2.查询系统中所有已安装的RPM软件包 3.查询RPM软件包的详细信息 4.查询RPM软件包中的文件列表 5.查询系统文件属于哪个RPM包 6.查询RPM软件包所依 ...
- 菜鸡的Java笔记 第六 - java 方法
前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式.而完整的组成方式将随着学习逐步渗透. 1.方法的基本定义 方法(Method)在一些书中也会有人将其说是 函数(Funct ...
- linux安全 设置登录失败次数后,拒绝登录
设置登录失败3次后锁定用户300秒可以通过配合文件/etc/pam.d/sshd配置如下 在第一行 #%PAM-1.0 的下一行添加1a auth required pam_tally2.so den ...
- python -三元表达式、列表生成式、字典生成式
目录 1.三元表达式 2.列表生成式 3.字典生成式 1.三元表达式 定义格式:true_return if condition else false_return if 后条件成立返回,true_r ...
- 时间处理,类似"xxxx-xx-xxTxx:xx:xx187+0000"格式
后端返回的时间:"2020-04-24T09:12:51.187+0000" 目标显示时间:2020-04-24 09:12:51 <!DOCTYPE html> ...
- [cf1458C]Latin Square
维护$n^{2}$个三元组$(x,y,z)$,每一个三元组描述$a_{x,y}=z$ 对于RLDU这四个操作,即将所有三元组的$x$或$y$执行$\pm 1$(模$n$意义下) 对于IC这两个操作,即 ...
- 第02章_MySQL环境搭建
第02章_MySQL环境搭建 1. MySQL的卸载 步骤1:停止MySQL服务 在卸载之前,先停止MySQL8.0的服务.按键盘上的"Ctrl + Alt + Delete"组合 ...
- 关于PHP的==运算符比较规则
==是比较运算,它不会去检查比较的具体类型是否相等,只是单纯的根据php内置的转换规则来比较 ===是全等运算,相对来说它的要求更为严格,比较过程不会进行类型转换,从类型到内容都要求相等 ===运算符 ...