指標反轉陣列
0.5s 256M木瓜截到了一串答案,但這串答案是反過來看的。評分程式會準備一個 int 陣列,並把第一個元素與最後一個元素的指標傳給你。請直接修改陣列,把整個陣列反轉。
你需要實作以下函式:
void array_reverse(int *head, int *tail);
head會指向某個int陣列的第一個元素。tail會指向同一個陣列的最後一個元素。- 請把這個陣列原地反轉。
- 指標都會指向有效元素,且陣列長度至少為 \(1\)。
- 請不要自行撰寫
main(),也不要讀取或輸出資料。
輸入格式
範例評分程式採用以下格式輸入:
T
n_1 a_{1,1} a_{1,2} ... a_{1,n_1}
n_2 a_{2,1} a_{2,2} ... a_{2,n_2}
\vdots
n_T a_{T,1} a_{T,2} ... a_{T,n_T}
其中 \(T\) 代表評分程式會呼叫 array_reverse 的次數。每次呼叫時,評分程式會建立一個長度為 \(n_i\) 的陣列,並呼叫 array_reverse(&arr[0], &arr[n_i - 1])。
請注意,正式評分時不會要求你自行讀取輸入;它會直接呼叫你實作的函式。
限制
- \(1 \le T \le 50\)
- \(1 \le n_i \le 10000\)
- \(-1000000000 \le a_{i,j} \le 1000000000\)
- 每次呼叫時,
head與tail都不是空指標,且都指向同一個陣列中的元素
輸出格式
範例評分程式會在每次呼叫後,輸出反轉後的陣列。
請注意,正式評分時不會要求你自行輸出任何內容。
範例輸入 1
1
5 1 2 3 4 5
範例輸出 1
5 4 3 2 1
範例解釋 1
原本陣列是 1 2 3 4 5,反轉後變成 5 4 3 2 1。
範例輸入 2
3
4 9 8 7 6
3 -3 0 4
1 42
範例輸出 2
6 7 8 9
4 0 -3
42
本機測試模板
如果你想先在自己的電腦上測試,只要把你實作的 array_reverse 函式貼到下面程式碼中的註解位置,就可以直接編譯執行:
#include <iostream>
#include <vector>
using namespace std;
// 把你實作的 array_reverse 貼在這裡。
// void array_reverse(int *head, int *tail) {
// }
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
array_reverse(&arr[0], &arr[n - 1]);
for (int i = 0; i < n; ++i) {
if (i) cout << ' ';
cout << arr[i];
}
cout << '\n';
}
}
題目來源
本題改編自 NTUCPC OJ Problem 627。