開啟章節選單
造字程式
題目說明
仔細看完題目後就會發現,其實這題只需要根據題目敘述來對字元做操作而已。給定一個初始的字串後,按照題目的說明來更改字串中的字元,並將過程記錄在一個二維的陣列中,最後再依照敘述輸出答案即可。
解題過程
在前面字串的章節我們已經提過字串的原理了,字串本質上就是一個字元陣列,只是提供更豐富的功能而已。因此在這個題目中,我們會使用字串來對運算做優化,做成的一維字串陣列相當於一個二維的字元陣列。
決定好要解題的流程後,第一步當然是依照題意獲取資訊。
cin >> k >> q >> r; cin >> s[0];
接著有 Q
次的修改,因此我們需要一個 for
迴圈來執行每一次的操作。而迴圈中很直觀的依照題目敘述,將舊的字元賦值給指定的位置。
for (int i = 1; i < q+1; i++) { s[i] = s[i-1]; for (int j = 0; j < k; j++) { int p; cin >> p; s[i][p-1] = s[i-1][j]; } }
最後我們再根據題目的敘述,撰寫迴圈來將陣列中的值輸出。如果用一層迴圈來固定輸出第一個字元的話,可以獲得 60%
的分數;要獲得滿分的話,則需撰寫一個巢狀迴圈,來完整的依照題意輸出答案。
for (int i = 0; i < r; i++) { for (int j = 1; j < q+1; j++) { cout << s[j][i]; } cout << "\n"; }
解題成果
#include <iostream> #include <string> using namespace std; int k, q, r; string s[21]; int main() { cin >> k >> q >> r; cin >> s[0]; for (int i = 1; i < q+1; i++) { s[i] = s[i-1]; for (int j = 0; j < k; j++) { int p; cin >> p; s[i][p-1] = s[i-1][j]; } } for (int i = 0; i < r; i++) { for (int j = 1; j < q+1; j++) { cout << s[j][i]; } cout << "\n"; } }