USACO Section 1.1 PROB Your Ride Is Here

题目描述

众所周知,每一颗好的彗星后面都是飞碟。这些不明飞行物经常来收集忠诚的支持者从这里在地球上。不幸的是,他们在每次旅行中只有一个空间去吸引一组追随者。然而,他们会让小组提前知道,每一颗彗星都会被一个聪明的计划所捕获:他们选择了一个彗星的名字,这个彗星的名字连同这个组的名字,可以用来确定它是否是一个特定的组的转向(你认为谁命名彗星?)下面给出了匹配方案的细节;你的工作是编写一个程序,用一组和一个彗星的名称,然后确定该组是否应该与飞碟后面的彗星。该组的名称和彗星的名称被转换成一个数字在以下方式:最后的数字只是产品的所有字母的名称,其中“A”是1和“Z”是26。例如,该集团“USACO”将21 * 19 * 1 * 3 * 15 = 17955。如果该组的数字国防部47是相同的彗星的数字国防部47,那么你需要告诉小组准备!(请记住“A模B”是除以B后剩下的部分;34模10是4。)编写一个程序,它以彗星的名字和组的名称来读取,并根据上面的方案计算出名字是否匹配,打印“GO”,如果它们匹配;打印“STAY”,如果不匹配。群和彗星的名字将是一组大写字母,没有空格或标点符号,长达6个字符。

例子

输入 输出
COMETQ
HVNGAT
GO
ABSTAR
USACO 
STAY
程序名称:ride
这意味着你填写你的标题:
PROG:ride
警告:您必须在此字段中有“ride”,否则将使用错误的测试数据(或不使用测试数据)。

输入格式

第1行:长度为1..6的大写字符串,是彗星的名称。
行2:长度为1..6的大写字符串,是组的名称。
注意:输入文件在每行末尾都有一个换行符,但没有“返回”。 有时候,程序员为Windows的“返回”模式编写了“换行符”; 不要这样做 使用简单的输入例程,如“readln”(对于Pascal),对于C / C ++,“fscanf”和“fid >> string”。
注2:由于额外的字符,如果您的语言使用它,请确保留下足够的“换行”空间(也称为“\ n”)和字符串字符('\ 0')的结尾(如C和 C ++做)。 这意味着你需要八个字符的空间,而不是六个。

输入 (file ride.in)
COMETQ
HVNGAT

输出格式

包含单词“GO”或单词“STAY”的单行。

输出(file ride.out)
GO

输出解释

将字母转换为数字:

COMETQ
3 15 1352017
H V NGAT
8 22 147120

然后计算mod 47:

3 * 15 * 13 * 5 * 20 * 17 = 994500 mod 47 = 27
8 * 22 * 14 * 7 *  1 * 20 = 344960 mod 47 = 27

因为这两个值都为27(当mod 47时),所以任务是'GO'。

解题思路

本题主要思路是,输入两个字符串,我们将把每个字符串中每个字符取出来,计算其值,然后相乘对47取余求值,判断这两个值是否相等相等输出“GO”,不等输出“STAY”。注意:因为字符串最长6位,6位相乘最大在int接受范围之内所以只要int类型就行,否则要考虑long或者long long。

解题代码

/*
ID: 15189822
PROG: ride
LANG: C++
*/
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
ifstream fin("ride.in");//输入文件流 
ofstream fout("ride.out");//输出文件流 
const int N = 6;
char s1[N+1],s2[N+1];
int main(){
    fin>>s1>>s2;//读出文件 
    int r1=1,r2=1;
int l1=strlen(s1),l2=strlen(s2);
    for(int i=0;i<l1;i++){
        r1*=(s1[i]-'A'+1);
        r1%=47;
    }
    for(int i=0;i<l2;i++){
        r2*=(s2[i]-'A'+1);
        r2%=47;
    }
    if(r1==r2) fout<<"GO"<<endl;//写入文件 
    else fout<<"STAY"<<endl;//写入文件
    return 0;
}


猜你喜欢

转载自blog.csdn.net/YanLucyqi/article/details/72770997