• UVA10424 【Love Calculator】


    首先,强调(:)这是一道充满爱的题目!!!

    从题目名字就可以看出,Love Calculator(Rightarrow)爱的计算(◦˘ ³(♡ŐωŐ♡


    咳咳,闲扯到此为止,开始正题(……)

    题目大意:给出两个人的名字,即两个字符串,其中每个字母分别对应(1sim 26),忽略字母以外字符,先对两个字符串按对应位字母的数值求和,在对这个和求一个数根,两个名字的数根的比值即为两个名字爱的结果,需要注意的是这个结果需要转成百分数形式且小于(100)%。

    P.s.:如果您把您和您的爱豆的名字按题意计算出的结果很低,请不要信以为真QwQ

    关于数根,如果您不知道,蒟蒻在这里给出百度百科的定义(:)

    数根(又称数字根,数字的根Digital root)是自然数的一种性质,换句话说,每个自然数都有一个数根。
    
    将一正整数的各个位数相加(即横向相加)后,若加完后的值大于等于10的话,则继续将各位数进行横向相加直到其值小于十为止所得到的数,即为数根。换句话说,数根是将一数字重复做其数字之和,直到其值小于十为止,则所得的值为该数的数根。例如54817的数根为7,因为5+4+8+1+7=25,25大于10则再加一次,2+5=7,7小于十,则7为54817的数根。
    
                                                                    -----------------来源于百度百科
    

    好了,既然你已经知道了数根的定义,那么我们显然可以发现,一个自然数的数根可以很简单的求出。

    那么我们用(map)(52)个字母(()含大小写())映射成(1sim 26),然后直接大力模拟即可。

    同样,一定要注意的输入输出格式!!!

    code;

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <map>
    
    using std::map;
    map<char, int>rhs;
    char man[26], woman[26];
    
    int main() {
        for (int i = 65; i <= 90; i++) rhs[char(i)] = i - 64;
        for (int i = 97; i <= 122; i++) rhs[char(i)] = i - 96; // 映射过程 map大法吼啊!!!
        while (gets(man) && gets(woman)) {
            int love_of_man = 0, love_of_woman = 0; // 自认为很清新的变量名
            for (int i = 0; i < strlen(man); i++) love_of_man += rhs[man[i]];
            for (int i = 0; i < strlen(woman); i++) love_of_woman += rhs[woman[i]];
            while (love_of_man >= 10) {
                int temp = 0;
                while (love_of_man) temp += love_of_man % 10, love_of_man /=10;
                love_of_man = temp;
            } // 求数根
            while (love_of_woman >= 10) {
                int temp = 0;
                while (love_of_woman) temp += love_of_woman % 10, love_of_woman /=10;
                love_of_woman = temp;
            } //同上
            double ans = (double)love_of_man / (double)love_of_woman; // 强制类型转换
            if (ans > 1.0) ans = 1.0 / ans; // 注意到结果要小于100%
            printf("%.2lf %%
    ", ans * 100); 
        }
        return 0;
    }
    
    

    完结撒花(✪ω✪)

  • 相关阅读:
    struts1——静态ActionForm与动态ActionForm
    【入门篇】ANDROID开发之BUG专讲
    oracle undo 复杂度--oracle核心技术读书笔记四
    linux高级技巧:rsync同步(二)
    【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
    一维动态数组和二维动态数组的创建和使用
    HDU 1788 Chinese remainder theorem again 中国剩余定理
    直接选择排序
    使用enca进行字符集转码
    拒绝switch,程序加速之函数指针数组
  • 原文地址:https://www.cnblogs.com/Hydrogen-Helium/p/11738000.html
Copyright © 2020-2023  润新知