• UVa 1586 Molar mass


    1586 - Molar mass

    要解决的问题

    • 如何将字母与它代表的数字对应?

      只有4个字母,枚举,用if else。

      python的话可以用字典。c++应该没有字典。

    • 字符转换为数组

      单个数字字符转换为数字,直接-‘0’,ascii中数字是连续的。

    • 判断是数字还是字母

      只有4个字母,直接if。

    mycode

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    //判断是不是字母
    int isAlp(char ch) 
    {
        if (ch == 'C') return 1;
        if (ch == 'H') return 1;
        if (ch == 'O') return 1;
        if (ch == 'N') return 1;
        return 0;
    }
    
    //单个数字字符转换为数字
    int ch2num(char ch)
    {
        return ch - '0';
    }
    
    int main()
    {
        int T;
        scanf("%d", &T);
        for (int i = 0; i < T; i++)
        {
            char s[81];
            scanf("%s", s);
            int len = strlen(s);
            float mass = 0;
            for (int j = 0; j < len; j++)
            {
                if (s[j] == 'C')//逐个判断
                {
                    if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))//两位数
                    {
                        mass += 12.01 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
    
                    }
                    else if (j + 1 < len && !isAlp(s[j + 1]))//一位数
                        mass += 12.01 * ch2num(s[j + 1]);
                    else
                        mass += 12.01;
                }
    
                if (s[j] == 'H')
                {
                    if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))
                        mass += 1.008 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
                    else if (j + 1 < len && !isAlp(s[j + 1]))
                        mass += 1.008 * ch2num(s[j + 1]);
                    else
                        mass += 1.008;
                }
    
                if (s[j] == 'O')
                {
                    if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))
                        mass += 16.00 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
                    else if (j + 1 < len && !isAlp(s[j + 1]))
                        mass += 16.00 * ch2num(s[j + 1]);
                    else
                        mass += 16.00;
                }
    
                if (s[j] == 'N')
                {
                    if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))
                        mass += 14.01 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
                    else if (j + 1 < len && !isAlp(s[j + 1]))
                        mass += 14.01 * ch2num(s[j + 1]);
                    else
                        mass += 14.01;
                }
    
            }
            printf("%.3f
    ", mass);
        }
        return 0;
    }
  • 相关阅读:
    sdut1282Find the Path (floyd变形)
    sdut1933WHUgirls(dp)
    二分图入门题集
    Codeforces Round #230 (Div. 1)
    PHP中关于 basename、dirname、pathinfo 详解
    nginx php mysql日志配置
    确保 PHP 应用程序的安全 -- 不能违反的四条安全规则
    mysql日期时间处理
    mysql索引类型和索引方法
    php Redis函数使用总结(string,hash,list, set , sort set )
  • 原文地址:https://www.cnblogs.com/shanchuan/p/8150296.html
Copyright © 2020-2023  润新知