在每一个慧星后都有一个飞碟。这些飞碟时常收集地球上的忠诚支持者。飞碟每次出行都只能带走一组支持者。因此,飞碟们需要一种方案提前知道哪个小组会被带走。每个慧星都有一个名字,通过慧星名字来决定这个小组是不是被带走的那个特定的小组。你的任务是写一个程序,通过小组名和慧星名来确定能否被飞碟带走。
小组名和慧星名都以下列方式转换成一个数字:最终的数字就是名字中所有字母的积,其中A是1,B是2,Z是26.例如USACO小组就是21 19 1 3 15等于17955(中间都是乘法,被csdn不给重复)。如果小组的数字模47等于彗星的数字模47,那么这个小组就会被带走。
写一程序,如果小组可以带走,输出“GO”,否则输出“STAY”.
我的:
#include <bits/stdc++.h>
using namespace std;
char a[100000],b[100000];
int main(){
int i=0,s1=1,s2=1;
bool flag=true;
while((a[i]=getchar())!='\n'){
i++;
}
for(int j=0;j<i;j++){
s1*=a[j]-80;
}
i=0;
while((b[i]=getchar())!='\n'){
i++;
}
for(int j=0;j<i;j++){
s2*=b[j]-80;
}
if(s1%47==s2%47){
cout<<"GO";
}
else{
cout<<"STAY";
}
}
最后一个点是AW,数据是:
Input:
FPW
MYWW
Output:
STAY
Answer:
GO
【以下回答由 GPT 生成】
问题原因: 在计算小组和慧星的数字时,使用的是*=
运算符将乘法结果赋给s1
和s2
。但是在每次循环中,先乘法再赋值可能会导致结果不正确。另外,因为计算的起始值为1,所以无论输入的小组或慧星是什么,结果永远都是1。这就是为什么无论输入什么,结果都是"STAY"的原因。
解决方案: - 将起始值调整为小组或慧星的第一个字符对应的数字。例如,将s1
和s2
的起始值设为a[0]-80
和b[0]-80
。 - 在乘法操作符前使用一个括号来确保先进行乘法运算,再进行赋值操作。
以下是修复后的代码:
#include <bits/stdc++.h>
using namespace std;
char a[100000], b[100000];
int main() {
int i=0,s1=a[0]-80,s2=b[0]-80;
bool flag=true;
while((a[i]=getchar())!='\n'){
i++;
}
for(int j=0; j<i; j++){
s1 *= (a[j]-80);
}
i=0;
while((b[i]=getchar())!='\n'){
i++;
}
for(int j=0; j<i; j++){
s2 *= (b[j]-80);
}
if(s1%47==s2%47){
cout<<"GO";
}
else{
cout<<"STAY";
}
}
应该是这样修改后,运行程序会得到正确的输出"GO"。
【相关推荐】