#43784: c++ 題解 使用字元陣列


a0903029537@gmail.com (Joan)

學校 : 國立嘉義女子高級中學
編號 : 150949
來源 : [140.116.247.232]
最後登入時間 :
2021-11-14 16:38:13
j606. 2. 造字程式 -- 2023年1月APCS | From: [140.112.193.185] | 發表日期 : 2024-10-31 01:31

#include<iostream>
using namespace std;

int main(){
    int k,q,r;
    //輸入k,q,r
    cin >> k >> q >> r;
    //字串最多只有20個字元 所以我們可以直接宣告一個長度21 的陣列來存字串
    char s[21]={},temp[21]={}; // temp是用來暫存移動s的內容 temporary
    cin >> s;

    //因為字串最多只有20個字元 所以我們可以直接宣告一個長度21 的陣列來存每行的數字
    int num[21]={};

    char ans[21][21] = {}; //儲存答案 存要輸出操作 第1 ~ q的每個新字串的第 1-r 個字元

    //處理每行數字的操作
    for(int j = 0 ; j < q ; j++){
        //先存入k個數字
        for(int i=0;i<k;i++){
            cin >> num[i];
            //temp[i] = s[num[i]-1];
            //我們在這裡想反了 這裡是要把s的第i個字元放到temp的第num[i]個位置
            //所以要改成
            temp[num[i]-1] = s[i];
        }
       
       
        //再將s的內容更新成temp的內容
        for(int i=0;i<k;i++){
            s[i] = temp[i];
            cout << s[i];
            ans[j][i] = s[i]; // 儲存該次操作後的新字串到 ans
        }
        cout << endl;
    }

    // 根據題意輸出結果,每行輸出新字串的第 1 ~ R 個字元
    for (int i = 0; i < r; i++) { //r行
        for (int j = 0; j < q; j++) { //每行q個字元
            cout << ans[j][i]; //輸出每個新字串的第r個字元 ij要反過來
        }
        cout << endl;
    }

}
/*
5 4 1
abcde
2 1 3 5 4
baced
5 1 2 4 3
acdeb
4 1 2 3 5
cdeab
3 1 4 5 2
dbcea
要輸出:輸出 r = 1行,每行 q = 4個字元
bacd
*/
/*
4 3 4
abac
4 1 3 2
bcaa
1 2 3 4
bcaa
2 3 4 1
abca
要輸出:輸出 r = 3行,每行 q = 4個字元
bba
ccb
aac
aaa
*/
 
ZeroJudge Forum