#39229: C++懶人解


010521@mail.pcsh.ntpc.edu.tw (Terry)

學校 : 新北市立板橋高級中學
編號 : 173875
來源 : [101.137.143.164]
最後登入時間 :
2024-04-08 01:18:52
m932. 2. 蜜蜂觀察 -- 2024年1月APCS | From: [101.137.141.255] | 發表日期 : 2024-01-24 20:25

先把基本變數都設定好,然後開一個char的陣列紀錄地圖char[25][25] = {};

接下來用一個for迴圈接收k個輸入的密碼code,用if-else把0~5的方向都各自寫好

例如:

if(code == 0){
    ni++;
}else if(code == 1){
    nj++;
}......
 
然後就可以輸出移動後的位置的字母
cout << arr[ni][nj];
 
最重要的是,輸出之前需要判定是否還在陣列範圍內,我是直接if(ni >= 0 && ni < n && nj >= 0 && nj < m)
ni 表示new_i
oi 表示old_i
如果new_i或new_j已經超出範圍,就直接拿old_i和old_j來用(需要在每次for迴圈的一開始 oi = ni; oj = nj;)
架構大致如下:
for(int i = 0; i < k; i++){
        //略...
        oi = ni;
        oj = nj;
        if(code == 0){
            ni++;
        }//判斷式略...
 
        //略...
 
        if(ni >= 0 && ni < n && nj >= 0 && nj < m){
            cout << arr[ni][nj];
            //略...
        }else{
            cout << arr[oi][oj];
            //略...
            ni = oi;
            nj = oj;
        }
    }
最後最後再開一個紀錄字母的陣列bool alpha[26*2],每次輸出紀錄輸出的字母,思考大小寫如何儲存在同一個陣列(可以直接判斷大小寫再存),計算不同種類的字有多少後輸出即可。(^_^)
 
ZeroJudge Forum