zoukankan      html  css  js  c++  java
  • UVA-1586 Molar mass(模拟)

    我们知道,对于一道模拟题,需要用计算机来解决,说明其中有操作相同的组成部分,我们称之为阶段。我们人工对每一个阶段给定操作进行处理,然后让计算机对不同阶段进行枚举或者说循环。遇到这种题的时候一定要分清阶段是什么,阶段里的内容和操作是什么,一定一定不要混淆相邻阶段之间的操作!!!对于此题来说,每一阶段就是一个元素和它后面可能跟着的数组,所以一次while循环里处理的就是这一个阶段。(这种思想类似于 https://acm.uestc.edu.cn/problem/bilibili-acfun-and-more/description 这题)

    这里还注意一波黑科技 isdigit是用来判断这个字符变量是否是个数字 isalpha是判断这个字符变量是否是字母,如果是大写字母返回1,如果是小写字母返回2,如果不是字母返回0

    这几个函数都在 ctype.h头文件里

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 const int MAX=105;
     4 int t,ls;
     5 char s[MAX];
     6 double ans;
     7 double get(char c){
     8     if (c=='C') return 12.01;
     9     if (c=='H') return 1.008;
    10     if (c=='O') return 16.00;
    11     if (c=='N') return 14.01;
    12 }
    13 int main(){
    14     freopen ("molar.in","r",stdin);
    15     freopen ("molar.out","w",stdout);
    16     int i,j;double zt,num;
    17     scanf("%d
    ",&t);
    18     while (t--){
    19         scanf("%s",s+1);
    20         ls=strlen(s+1);
    21         i=1;ans=0;
    22         while (i<=ls){
    23             if (isalpha(s[i])){
    24                 zt=get(s[i]);
    25                 num=0.0;
    26                 i++;
    27             }
    28             if (isdigit(s[i])){
    29                 while (i<=ls && isdigit(s[i])){
    30                     num=num*10+s[i]-'0';
    31                     i++;
    32                 }
    33                 ans+=num*zt;
    34             }
    35             else ans+=zt;
    36         }
    37         printf("%.3lf
    ",ans);
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    RocketMQ实战:生产环境中,autoCreateTopicEnable为什么不能设置为true
    x 的平方根--二分查找
    责任链模式--设计模式
    迭代器模式--设计模式
    组合模式--设计模式
    搜索旋转排序数组II
    搜索旋转排序数组--二分查找
    搜索插入位置--二分查找
    越狱详解与调试--逆向开发
    有序链表转换二叉搜索树--链表
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/13835330.html
Copyright © 2011-2022 走看看