#include <bits/stdc++.h>
using namespace std;
int m,n,k;
int c[58];
char b[20][20];
string s;
vector<pair<int,int>> turn={{-1,0},{0,1},{1,1},{1,0},{0,-1},{-1,-1}};
int main(){
cin>>m>>n>>k;
for(int i=0;i<m;i++){
cin>>s;
for(int j=0;j<n;j++){
b[i][j]=s[j];
}
s.clear();
}
int g,sr=m-1,sc=0;
string ans;
for(int i=0;i<k;i++){
cin>>g;
if(sr+turn[g].first<0||sc+turn[g].second<0||sr+turn[g].first>=m||sr+turn[g].second>=n){
ans+=b[sr][sc];
continue;
}
sr+=turn[g].first;
sc+=turn[g].second;
ans+=b[sr][sc];
}
cout<<ans<<endl;
int sans=0;
for(int i=0;i<ans.size();i++){
if(c[ans[i]-'A']==0){
sans++;
c[ans[i]-'A']++;
}
c[ans[i]-'A']++;
}
cout<<sans;
return 0;
}
謝謝幫忙
你 char c[58] 的用法是有問題的
看起來你想把它當計數器用,但你讀資料時讀的方式是 c[ans[i] - 'A']
如果字母都大寫的話沒關係,但問題是還有小寫
英文字母大小寫的 ascii 編碼位置不是連續的,沒有事先判斷就直接減,只要讀入的是小寫就會越界存取,然後就會出現各種神祕的魔法
不對,對不起,我錯了,你計數器開到 58 個是夠用的
真正有問題的地方不在這,是錯字
在檢查是否越界的邏輯 if(sr+turn[g].first<0||sc+turn[g].second<0||sr+turn[g].first>=m||sr+turn[g].second>=n)
的最後一條判斷 sr+turn[g].second>=n
應該是 sc+turn[g].second 而不是 sr
不對,對不起,我錯了,你計數器開到 58 個是夠用的
真正有問題的地方不在這,是錯字
在檢查是否越界的邏輯
if(sr+turn[g].first<0||sc+turn[g].second<0||sr+turn[g].first>=m||sr+turn[g].second>=n)的最後一條判斷
sr+turn[g].second>=n應該是 sc+turn[g].second 而不是 sr
我竟然犯了最低級的錯誤,謝謝