**有点小长,麻烦了**
by Uchiha_madara @ 2022-10-04 15:20:16
数组是从0到n-1为下标的,也就是你定义一个数组a[6],只有a[0],a[1],a[2]...,a[5],不含有a[6],所以要多定义一些比如定义成a[10] (多定义一些没有关系,太小了就不行了)
ut和et没赋初始值,放int main()的括号外面就会变成0。 0乘任何数都得0,所以应该赋初始值为1
------------
**最最重要的**,就是输入是1到6之间的长度,不是输入6个字符!
(其实我一开始就发现了,但是我总觉得没有关系,导致卡了好久)
##
#### 美国有个叫ASCLL码的东西用来存储字符的编号
比如 'A'的ASCLL码就是65,'a'是97.
你可以这样知道字母'a'的ASCLL码
```
cout << int('A');
```
然后你就可以优化你的代码啦!
------------
## 优化后的代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
char ufo[7],earth[7];
int u[7]={0,1,1,1,1,1,1},e[7]={0,1,1,1,1,1,1};
long long ut=1,et=1;
int main(){
for(int i=1;i<=6;i++){
ufo[i] = getchar();
if(ufo[i]<'A'||ufo[i]>'Z')break;//不是A到Z的字符就说明读到换行符了,不读了
u[i] = ufo[i]- 'A' + 1;//+1是因为'A'-'A'=0,而你想要的'A'等于1
}
getchar();
for(int i=1;i<=6;i++){
earth[i] = getchar();
if(earth[i]<'A'||earth[i]>'Z')break;
e[i] = earth[i]-'A'+1;
}
for(int i=1;i<=6;i++){
ut*=u[i];
et*=e[i];
}
if(ut%47==et%47){
cout<<"GO";
}
else{
cout<<"STAY";
}
return 0;
}
```
~~面目全非了,但是效率很高。~~
@[Uchiha_madara](/user/481542)
by WZRYWZWY @ 2022-10-04 16:07:59
谢谢大佬(本人刚学25天),菜出天际
求互关
by Uchiha_madara @ 2022-10-05 19:33:05
@[WZRYWZWY](/user/704668)
by Uchiha_madara @ 2022-10-05 19:33:42
已AC,蟹蟹
(验证码NBD3祭)
by Uchiha_madara @ 2022-10-05 19:34:59