题目描述 有n个整数,通过设置两个指针,分别指向数组的首、尾元素,通过不使用using namespace std两个指针的不断移动,交换前后的数组元素,使数组逆序。 输入 输入数据有多组,每组单独占一行,第1个数n(n<=20)表示该组测试数据的个数,后跟n个整数。n为0时结束,不处理。 输出 对应每组输入,输出逆序的结果,每组单独占一行,数据之间用一个空格分隔。 样例输入 复制 10 1 2 3 4 5 6 7 8 9 10 5 1 2 3 4 5 0 样例输出 复制 10 9 8 7 6 5 4 3 2 1 5 4 3 2 1 提示 必须通过指针的移动来交换数据,否则不计分。
时间: 2024-02-15 13:02:58 浏览: 44
以下是 C++ 代码实现:
```cpp
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {
int n;
while (cin >> n && n != 0) {
int* arr = new int[n]; // 动态分配数组空间
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
// 双指针逆序数组
int* p1 = arr;
int* p2 = arr + n - 1;
while (p1 < p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
++p1;
--p2;
}
// 输出逆序后的数组
for (int i = 0; i < n; ++i) {
cout << arr[i] << ' ';
}
cout << endl;
// 释放数组空间
delete[] arr;
}
return 0;
}
```
使用双指针的方法可以避免使用额外的数组空间,从而实现对数组的原地逆序操作。需要注意的是,动态分配的数组空间需要在使用后及时释放,否则会导致内存泄漏。
阅读全文