两个题目均取自UVa,分别为UVa 1586和UVa 1225。


分子量

给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4中原子,分别为C, H, O, N,分子量分别为12.01,1.008,16.00,14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol。

分析

1.输入数据保存为字符串;

2.因为原子的个数在原子之后,所以倒序判定字符类型:若为数字则可按照个、十、百的顺序计算原子个数,遇到字母则乘以对应原子量和原子个数;

3.判断类型的函数包含在cctype头文件中。

下面给出参考代码:

#include<iostream>
#include<cstring>
#include<cctype>
#define MAX 100
using namespace std;
char s[MAX];
const double moc = 12.01;
const double moh = 1.008;
const double moo = 16.00;
const double mon = 14.01;
int main(){int num, sum = 0, q = 1; double M = 0.0;scanf("%s", s);for(int i = strlen(s); i>=0; i--){if(isdigit(s[i])){num = s[i]-'0';//由ASCII码取得数字 sum+=num*q;q = q*10;}if(isalpha(s[i])){switch(s[i]){case 'C': M+=sum*moc; sum = 0; q = 1; break;case 'H': M+=sum*moh; sum = 0; q = 1; break;case 'O': M+=sum*moo; sum = 0; q = 1; break;case 'N': M+=sum*mon; sum = 0; q = 1; break;}}}cout<<M<<"\n";return 0;
}

数数字

把前n个整数顺次写在一起:0123456789101112……数一数0~9各出现多少次(输出10个整数,分别是0,1,…,9出现的次数)。

分析

不用做复杂分析得出什么前n个数字一共有几个0~9数字的数学公式,大量的判定工作都交给计算机完成。

#include<iostream>
#include<cstring>
using namespace std;int main(){int n;cin>>n;int a[n+1][10];memset(a, 0, sizeof(a));for(int i = 1; i<n+1; i++){for(int j = 1; j<=i; j++){int k = j;while(k!=0){int q = k%10; k/=10;switch(q){case 0: a[i][0]++; break;case 1: a[i][1]++; break;case 2: a[i][2]++; break;case 3: a[i][3]++; break;case 4: a[i][4]++; break;case 5: a[i][5]++; break;case 6: a[i][6]++; break;case 7: a[i][7]++; break;case 8: a[i][8]++; break;case 9: a[i][9]++; break;}}}}for(int i = 0; i<10; i++){cout<<a[n][i]<<"\t";}return 0;
}

取上限10000,结果如下:

可见运行时间并不算太长。

但若要求多次输入n,并返回结果呢?仍然在每次输入后都进行循环判定并计数吗?答案是否定的。因为这样做难免会大大增加运行时间。但若将前10000个正整数顺次写在一起的结果事先计算出来并保存到数组中,那么每次输入n后只需“查表”即可返回对应结果。下面的改进程序即运用了此思想:

#include<iostream>
#include<cstring>
const int MAX = 10001;
using namespace std;int main(){int n;int a[MAX][10];memset(a, 0, sizeof(a));for(int i = 1; i<MAX; i++){for(int j = 1; j<=i; j++){int k = j;while(k!=0){int q = k%10; k/=10;switch(q){case 0: a[i][0]++; break;case 1: a[i][1]++; break;case 2: a[i][2]++; break;case 3: a[i][3]++; break;case 4: a[i][4]++; break;case 5: a[i][5]++; break;case 6: a[i][6]++; break;case 7: a[i][7]++; break;case 8: a[i][8]++; break;case 9: a[i][9]++; break;}}}}while(scanf("%d", &n)==1&&n){for(int i = 0; i<10; i++){cout<<a[n][i]<<"\t";}cout<<"\n";}return 0;
}

运行结果如:

欢迎留言讨论,提出更简便方法。

分子量(Molar Mass)数数字(Digit)||UVa 1586,1225相关推荐

  1. 算法竞赛入门经典 习题3-2 分子量 Molar Mass

    给出一种物质的分子式(不带括号),求其分子量.本题分子式中只包含四种原子,分别为C.H.O.N,原子量分别为12.01,1.008,16.00,14.01.例如,C6H5OH的分子量为94.108g/ ...

  2. 分子量(Molar Mass)

    Description 给出一种物质的得分子式(不带括号), 求分子量.本题中的分子式只包含4种原子,分别为C,H,O,N,原子的量分别为12.01,1.008,16.00,14.01.例如,C6H5 ...

  3. 分子量 Molar Mass

    给出一种物质的得分子式(不带括号), 求分子量.本题中的分子式只包含4种原子,分别为C,H,O,N,原子的量分别为12.01,1.008,16.00,14.01.例如,C6H5OH的分子的量为94.1 ...

  4. 数数字Digit Counting(Python)

    把前n(n<=10000)个整数顺次写在一起:123456789101112-数一数0~9各出现多少次(输出10个整数,分别是0, 1, -, 9出现的次数). 思路: 这道题就是统计频数的,首 ...

  5. 分子量Molar Mass

    题目 给出一种物质的分子式(不带括号),求分子量.本题中的分子式只包含4种原子,分别为 C . H .0. N ,原子量分别为12.01.1.008.16.00.14.01(单位: g / mol ) ...

  6. 分子量 (Molar Mass, ACM/ICPC Seoul 2007, UVa1586)

    给出一种物质的分子式(不带括号),求分子量.本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol),输入t个分子 ...

  7. UVa 1586 Molar mass 分子量 题解

    英文 Description An organic compound is any member of a large class of chemical compounds whose molecu ...

  8. 算法入门竞赛习题3-3:数数字(Digit Counting) 把前n(n≤10000)个整数顺次写在一起:123456789101112…数一数0~9各出现多少次。

    算法入门竞赛习题 习题3-3:数数字(Digit Counting) 把前n(n≤10000)个整数顺次写在一起:123456789101112-数一数0-9各出现多少次 (输出10个整数,分别是0, ...

  9. Molar mass(计算分子量)字符转化

    题目 An organic compound is any member of a large class of chemical compounds whose molecules contain ...

最新文章

  1. casperjs 安装试用
  2. python怎么判断是不是列表_python判断变量是否为int、字符串、列表、元组、字典等方法...
  3. Java常用类之String类、Stringbuffer和Random类练习
  4. 使用tensorflow预测函数的参数值(a simple task)
  5. ios字典存bool_#iOS 打印中文字典,数组,控制台输出中文,并保持缩进格式
  6. OS X进程管理之launchctl
  7. 兔子生崽问题编程_贵阳在哪里可以学到好的少儿编程
  8. 中职高级计算机操作员,计算机操作员专业排行榜
  9. Bzoj 2724: [Violet 6]蒲公英(分块)
  10. 利用计算机测地震是计算机的什么,计算机在气象预报、地震探测、导弹卫星轨迹等方面的应用都属于( )...
  11. JUnit-4.12使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
  12. 【No.11 默认实参的匹配】
  13. 安卓打开本应用的应用信息界面的代码
  14. chrome extensions快捷键shortcuts配置
  15. python音乐推荐系统的设计与实现_基于协同过滤的音乐推荐系统
  16. 移动硬盘与电脑连接后 计算机中找不到,移动硬盘不显示盘符怎么办 移动硬盘显示不出来解决方法【详解】...
  17. JxBrowser做爬虫时处理浏览器对话框
  18. C#实现自动升级(附源码)
  19. gridview动态添加行
  20. Exception in thread main java.lang.OutOfMemoryError: Java heap space(Java堆空间内存溢出)解决方法...

热门文章

  1. 基于stm32通过HC_05(ZS-040)蓝牙模块用手机控制stm32开发板上led灯的亮灭
  2. python爬虫爬取网络小说
  3. 牛顿环-SSMVEP稳态运动视觉刺激诱发电位-视觉刺激界面
  4. 看高手如何玩弄QQ上的骗子!
  5. 分布式事务(2)基础理论
  6. 箩筐技术公司宣布新一届董事会成员以及高管任命
  7. 清华大学2020年毕业生就业质量报告出炉!哥伦比亚大学成为留学最热门高校!...
  8. 沪江日语电台和听歌学日语节目走进博客园咯~
  9. 安卓 NFC 主机卡模拟
  10. 时间序列预测专项——基于Prophet的业务预测