#54127: 有人可以幫我看嗎卡在75%


s310107@student2.ylsh.chc.edu. ... (Sunjoker)


#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;
}

謝謝幫忙

#54133: Re: 有人可以幫我看嗎卡在75%


pofly (不挖鼻孔有害身心健康)


char c[58] 的用法是有問題的

看起來你想把它當計數器用,但你讀資料時讀的方式是 c[ans[i] - 'A'] 

如果字母都大寫的話沒關係,但問題是還有小寫

英文字母大小寫的 ascii 編碼位置不是連續的,沒有事先判斷就直接減,只要讀入的是小寫就會越界存取,然後就會出現各種神祕的魔法

 

https://www.asciitable.com/

#54135: Re: 有人可以幫我看嗎卡在75%


pofly (不挖鼻孔有害身心健康)


不對,對不起,我錯了,你計數器開到 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

#54136: Re: 有人可以幫我看嗎卡在75%


s310107@student2.ylsh.chc.edu. ... (Sunjoker)


不對,對不起,我錯了,你計數器開到 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


我竟然犯了最低級的錯誤,謝謝