E-tutor [程式設計][C_AR182-中] 翻轉吧陣列
簡介
題目來源:e-tutor平台
[C_AR182-中] 翻轉吧陣列
翻轉吧陣列,先儲存資料後,經題目的命令,做出三種不同的二維陣列翻轉,做完這題可以使我們對陣列更加的了解
讓我們先了解題目內容
問題描述:
假設一個 N * N 的陣列 ( N <= 20 ),每個位置從左到右,從上到下,依序填入 1 ~ N² 的數字,假設 N = 4,陣列的初始狀態如圖所示。接著,這裡有三種翻轉動作,分別是水平、垂直與對角翻轉,從初始狀態分別進行這三種翻轉動作後對應的結果分別如圖所示:


請撰寫一個程式,可以先讀取一個正整數 N,接著讀入一串由 H V D 所組成的翻轉字串,接著輸出初始狀態經過一連串翻轉後的結果。
Input:
輸入資料有兩行,第一行是陣列大小 N ( N <= 20 ),第二行是一個由 H V D 所組成的字串,長度 <= 20。
Output:
輸出初始狀態經過指定之一連串翻轉動作後的結果。
範例:
解題想法:
先把題目所需的方陣中數字填進去,依照命令分開寫不同的迴圈來翻轉矩陣,並且每次翻轉完取代原本的陣列,最後再輸出答案。
第一步、處理題目所需的輸入格式
1.宣告題目所需的陣列大小,number
2.宣告整數 count 等於 1,這個計數器後面會派上用場
3.宣告題目需讀入的翻轉指令字串 s
4.輸入整數 number 和字串 s
※輸入 number 後,再輸入字串 s 前要先加入 cin.ignore(1000,'\');
避免輸入完數字後按 enter,程式會誤以為 enter 就是字串 s
5.使用 vector 功能建立一個用來儲存方陣的二維整數陣列,OriginalArray
第二步、依測試資料提供的陣列大小,把數字放進二維陣列
題目並沒有給我們整個二維陣列裡的值
每次陣列的大小也不一定
因此陣列裡的值只能有我們自己放進去
1.設置一個迴圈為陣列中的列
2.迴圈內宣告一個整數陣列 buf1,為放數字用
3.迴圈內設置第二個迴圈為陣列中的行
這時 count 就派上用場了
迴圈每跑一次,就把 count 的值放進 buf1 陣列中
並把 count 加 1
4.在第二個迴圈外把整數一維陣列 buf1 放進二維陣列 OriginalArray 中
※在寫多重迴圈時,注意變數名稱不要重複,否則會有問題
第三步、掃描字串 s,並製造題目中的三種翻轉方法
設置掃描 s 字串的迴圈
1.如果 s 字串中有元素為 " H "
水平翻轉
如何水平翻轉?
1-1.
使用 vector 設置一個儲存水平翻轉的二維陣列,Horizontal
1-2.
如第二步,設置雙重迴圈
設置完列迴圈後,先在迴圈內宣告整數一維陣列 hbuf,為等等要放進 Horizontal
1-3.
在列迴圈內設置行迴圈
起始值 k 設為每列的最後一項,從每列的最尾端開始往前
把每個元素放進 hbuf 陣列中
接著在迴圈外把 hbuf 陣列放進二維陣列 Horizontal
1-4.
原始陣列翻轉後放在二維陣列 Horizontal
現在要把原始陣列覆蓋掉,修改成二維陣列 Horizontal
設定雙重迴圈
把 OriginalArray 每列每行的元素都變成 Horizontal
成功覆蓋後記得清空 Horizontal
這樣重複使用時才不會出現錯誤
2.如果 s 字串中有元素為 " V "
垂直翻轉
如何垂直翻轉?
2-1.
使用 vector 設置一個儲存垂直翻轉的二維陣列,Vertical
2-2.
如第一點,設置雙重迴圈
設置列迴圈後
起始值 j 設為每行的最後一項,從每行的最尾端開始往前
先在迴圈內宣告指數一維陣列 vbuf,為等等要放進 Vertical
2-3.
在列迴圈內設置行迴圈
把每個元素放進 vbuf 陣列中
接著在迴圈外把 vbuf 陣列放進二維陣列 Vertical
2-4.
原始陣列翻轉後放在二維陣列 Vertical
現在要把原始陣列覆蓋掉,修改成二維陣列 Vertical
設定雙重迴圈
把 OriginalArray 每列每行的元素都變成 Vertical
成功覆蓋後記得清空 Vertical
這樣重複使用時才不會出現錯誤
3.如果 s 字串中有元素為 " D "
對角翻轉
如何對角翻轉?
3-1.
使用 vector 設置一個儲存對角翻轉的二維陣列,Diagonal
3-2.
設置雙重迴圈
設置完列迴圈後,先在迴圈內宣告整數一維陣列 dbuf,為等等要放進 Diagonal
3-3.
在列迴圈內設置行迴圈
把每個元素放進 dbuf 陣列中
放進時記得把列 j 和行 k 對調, OriginalArray[k][j] → OriginalArray[k][j]
接著在迴圈外把 dbuf 陣列放進二維陣列 Diagonal
3-4.
原始陣列翻轉後放在二維陣列 Diagonal
現在要把原始陣列覆蓋掉,修改成二維陣列 Diagonal
設定雙重迴圈
把 OriginalArray 每列每行的元素都變成 Diagonal
成功覆蓋後記得清空 Diagonal
這樣重複使用時才不會出現錯誤
第四步、輸出陣列 OriginalArray 的所有元素
1.設置雙重迴圈,分別為搜尋列與行
2.依照題目輸出格式須以矩陣方式輸出
因此要設定判斷式來判斷何時需要空白何時需要斷行
如果輸出為每列的最後一個元素時就斷行
否則就加空白
這樣就完成了!
以下為完整程式碼
題目來源:e-tutor平台
[C_AR182-中] 翻轉吧陣列
翻轉吧陣列,先儲存資料後,經題目的命令,做出三種不同的二維陣列翻轉,做完這題可以使我們對陣列更加的了解
讓我們先了解題目內容
問題描述:
假設一個 N * N 的陣列 ( N <= 20 ),每個位置從左到右,從上到下,依序填入 1 ~ N² 的數字,假設 N = 4,陣列的初始狀態如圖所示。接著,這裡有三種翻轉動作,分別是水平、垂直與對角翻轉,從初始狀態分別進行這三種翻轉動作後對應的結果分別如圖所示:
請撰寫一個程式,可以先讀取一個正整數 N,接著讀入一串由 H V D 所組成的翻轉字串,接著輸出初始狀態經過一連串翻轉後的結果。
Input:
輸入資料有兩行,第一行是陣列大小 N ( N <= 20 ),第二行是一個由 H V D 所組成的字串,長度 <= 20。
Output:
輸出初始狀態經過指定之一連串翻轉動作後的結果。
範例:
解題想法:
先把題目所需的方陣中數字填進去,依照命令分開寫不同的迴圈來翻轉矩陣,並且每次翻轉完取代原本的陣列,最後再輸出答案。
第一步、處理題目所需的輸入格式
1.宣告題目所需的陣列大小,number
2.宣告整數 count 等於 1,這個計數器後面會派上用場
3.宣告題目需讀入的翻轉指令字串 s
4.輸入整數 number 和字串 s
※輸入 number 後,再輸入字串 s 前要先加入 cin.ignore(1000,'\');
避免輸入完數字後按 enter,程式會誤以為 enter 就是字串 s
5.使用 vector 功能建立一個用來儲存方陣的二維整數陣列,OriginalArray
第二步、依測試資料提供的陣列大小,把數字放進二維陣列
題目並沒有給我們整個二維陣列裡的值
每次陣列的大小也不一定
因此陣列裡的值只能有我們自己放進去
1.設置一個迴圈為陣列中的列
2.迴圈內宣告一個整數陣列 buf1,為放數字用
3.迴圈內設置第二個迴圈為陣列中的行
這時 count 就派上用場了
迴圈每跑一次,就把 count 的值放進 buf1 陣列中
並把 count 加 1
4.在第二個迴圈外把整數一維陣列 buf1 放進二維陣列 OriginalArray 中
※在寫多重迴圈時,注意變數名稱不要重複,否則會有問題
第三步、掃描字串 s,並製造題目中的三種翻轉方法
設置掃描 s 字串的迴圈
1.如果 s 字串中有元素為 " H "
水平翻轉
如何水平翻轉?
1-1.
使用 vector 設置一個儲存水平翻轉的二維陣列,Horizontal
1-2.
如第二步,設置雙重迴圈
設置完列迴圈後,先在迴圈內宣告整數一維陣列 hbuf,為等等要放進 Horizontal
1-3.
在列迴圈內設置行迴圈
起始值 k 設為每列的最後一項,從每列的最尾端開始往前
把每個元素放進 hbuf 陣列中
接著在迴圈外把 hbuf 陣列放進二維陣列 Horizontal
1-4.
原始陣列翻轉後放在二維陣列 Horizontal
現在要把原始陣列覆蓋掉,修改成二維陣列 Horizontal
設定雙重迴圈
把 OriginalArray 每列每行的元素都變成 Horizontal
成功覆蓋後記得清空 Horizontal
這樣重複使用時才不會出現錯誤
2.如果 s 字串中有元素為 " V "
垂直翻轉
如何垂直翻轉?
2-1.
使用 vector 設置一個儲存垂直翻轉的二維陣列,Vertical
2-2.
如第一點,設置雙重迴圈
設置列迴圈後
起始值 j 設為每行的最後一項,從每行的最尾端開始往前
先在迴圈內宣告指數一維陣列 vbuf,為等等要放進 Vertical
2-3.
在列迴圈內設置行迴圈
把每個元素放進 vbuf 陣列中
接著在迴圈外把 vbuf 陣列放進二維陣列 Vertical
2-4.
原始陣列翻轉後放在二維陣列 Vertical
現在要把原始陣列覆蓋掉,修改成二維陣列 Vertical
設定雙重迴圈
把 OriginalArray 每列每行的元素都變成 Vertical
成功覆蓋後記得清空 Vertical
這樣重複使用時才不會出現錯誤
3.如果 s 字串中有元素為 " D "
對角翻轉
如何對角翻轉?
3-1.
使用 vector 設置一個儲存對角翻轉的二維陣列,Diagonal
3-2.
設置雙重迴圈
設置完列迴圈後,先在迴圈內宣告整數一維陣列 dbuf,為等等要放進 Diagonal
3-3.
在列迴圈內設置行迴圈
把每個元素放進 dbuf 陣列中
放進時記得把列 j 和行 k 對調, OriginalArray[k][j] → OriginalArray[k][j]
接著在迴圈外把 dbuf 陣列放進二維陣列 Diagonal
3-4.
原始陣列翻轉後放在二維陣列 Diagonal
現在要把原始陣列覆蓋掉,修改成二維陣列 Diagonal
設定雙重迴圈
把 OriginalArray 每列每行的元素都變成 Diagonal
成功覆蓋後記得清空 Diagonal
這樣重複使用時才不會出現錯誤
第四步、輸出陣列 OriginalArray 的所有元素
1.設置雙重迴圈,分別為搜尋列與行
2.依照題目輸出格式須以矩陣方式輸出
因此要設定判斷式來判斷何時需要空白何時需要斷行
如果輸出為每列的最後一個元素時就斷行
否則就加空白
這樣就完成了!
以下為完整程式碼
留言
張貼留言