题目
问题描述
将字符串转变为数字,字母A对应的值为1,依次对应,字母Z对应的值为26。现在有一个字符串,将其中的每个字符转变为数字之后进行累乘,最终的结果对47求余数。
题目给你两个字符串,其中的字符都是大写字母,如果通过上述处理,两个字符串最终转变的数字结果是相等的,输出GO,否则输出STAY。
输入样例
COMETQ
HVNGAT
输出样例
GO
解题思路
该题主要让我们熟悉USACO的文件输入输出方式,是一个简单的模拟。USACO有一个特点就是必须在每份代码中用注释的方式,填写自己的用户名、题目名称,还有使用的编程语言,注意要进行文件输入输出。
为了与我之前ACM的风格保持一致,我在代码中用了重定向的方式来进行文件输入输出。重定向的部分写在了#ifdef
和#endif
中。只有定义了MARK
符号才会编译两条freopen
语句。我如果想要在本机命令窗口进行输入输出,只需要将#define MARK
语句注释掉即可。在提交到oj之前把注释取消。
解题代码
/*
ID: yinzong2
PROG: ride
LANG: C++11
*/
#define MARK
#include<cstdio>
#include<iostream>
#include<fstream>
#include<string>
#include<cstring>
using namespace std;
const int maxn = 10;
int main() {
#ifdef MARK
freopen("ride.in", "r", stdin);
freopen("ride.out", "w", stdout);
#endif
char str1[maxn], str2[maxn];
cin >> str1 >> str2;
int len1 = strlen(str1);
int ans1 = 1;
int len2 = strlen(str2);
int ans2 = 1;
for(int i = 0; i < len1; i++) {
ans1 *= (str1[i] - 'A' +1);
}
ans1 %= 47;
for(int i = 0; i < len2; i++) {
ans2 *= (str2[i] - 'A' +1);
}
ans2 %= 47;
if(ans1 == ans2) {
cout << "GO" << endl;
} else {
cout << "STAY" << endl;
}
return 0;
}