题解 P1200 【[USACO1.1]你的飞碟在这儿Your Ride Is He…】

· · 题解

该题的关键点在于从大写字母到数字建立映射! 楼下的题解很多是通过:大写字母-‘A’+1,从而得到对应的数字。 我们不妨建立一个字符数组,数组中每一个字符与其下标存在对应关系,我们利用这个可以建立符合题目的映射。这种技巧在P1055 ISBN号码(前一题)中能取得非常理想的效果,从而使代码大大简化。

#include<stdio.h>
#include<string.h>
int main()
{
    char ch[30]={"0ABCDEFGHIJKLMNOPQRSTUVWXYZ"};  //下标为0的位置要填充,这样A才对应1.. 
    char a[10],b[10];
    int i,j,product_1=1,product_2=1;
    scanf("%s%s",a,b);

    for(i=0;i<strlen(a);i++)
        for(j=1;j<=26;j++)
            if(a[i]==ch[j])
                product_1=product_1*j;

    for(i=0;i<strlen(b);i++)
        for(j=1;j<=26;j++)
            if(b[i]==ch[j])
                product_2=product_2*j;

    if(product_1%47==product_2%47) printf("GO");
    else printf("STAY");
    return 0;
}

然而,有人每次要为字母寻找对应的数字都要遍历ch[],所以个人感觉效率可能没有楼下的题解高。但这种技巧是值得借鉴的。