前置

无聊开个新坑,最近学校在学 C++ ,那么这边也跟进一下实操分析。
主要还是当备忘录使的,[保存回家路线,防止迷路(bushi)]

本蒟蒻 C++ 其实很菜的,各位大佬别喷 www。

本题难度:入门
代码中只有数组,没有逆置函数、指针等,请放心食用。(什)

题目

现在输入数据,要求在输入前询问需要输入的数据个数,记为 n,接着接收这 n 个数据保存到数组中,然后输出逆置 (Reverse) 后的数组。

样例输入:

1
2
3
4
5
6
5
1
3
4
5
8

样例输出:

1
2
3
4
你输入的数组:
1 3 4 5 8
逆置后数组:
8 5 4 3 1

分析

动态数组

首先要求输入数据个数,那么直接 int 一个变量 n 再cin接收变量 n 即可。
显然,数组长度是不确定的,所以我们需要用vector来创建一个动态数组

1
2
#include <vector>
vector<int> arr(n);

接着,循环 n 次来接收数组中的 n 个元素,可以直接使用 for 循环搞定,然后输出刚刚接收的所有元素即可。

元素交换

我们假设第一个元素为start,最后一个元素为end。第一个元素为arr[0],最后一个元素就是arr[n-1](因为从 0 开始)。
要逆置数组,只需要先取出第一个元素即arr[0] ,这里先 int 一个temp变量,然后将arr[0]放入temp变量中。接着,将最后一个元素即arr[n-1]覆盖到arr[0]的位置,最后再用temp覆盖掉arr[n-1]
这样就完成了首尾元素的交换。

循坏

完成一次交换后,让start + 1,end - 1 ,这样就可以进行第二个元素和倒数第二个元素的位置交换,不难发现,在start < end条件满足的情况下,循环将持续进行。
通过 start++ 和 end– 来确保在交换每一对元素后,start 和 end 向中间靠拢,直到整个数组逆置完成。

全部完成后,输出新的数组即可。

代码(有注释)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <vector> // 引入头文件
using namespace std;
int main() {
int n;
cout << "输入数组的大小:";
cin >> n;
vector<int> arr(n); // 创建动态数组
for (int i = 0; i < n; i++) {
cout << "输入你的数据:";
cin >> arr[i]; // 循环 n 次,接收输入的数据
}
cout << "你输入的数组:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << "\t"; // 输出输入的数组
}
cout << endl;
int start = 0;
int end = n - 1;
while (start < end) { // 数组逆置通解
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
cout << "逆置后数组:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << "\t"; // 输出新数组,\t用于对齐文本
}
cout << endl; // 换行
return 0;
}

代码(无注释)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cout << "输入数组的大小:";
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cout << "输入你的数据:";
cin >> arr[i];
}
cout << "你输入的数组:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << "\t";
}
cout << endl;
int start = 0;
int end = n - 1;
while (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
cout << "逆置后数组:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << "\t";
}
cout << endl;
return 0;
}

直接倒序输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cout << "输入数组的大小:";
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cout << "输入你的数据:";
cin >> arr[i];
}
cout << "你输入的数组:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << "\t";
}
cout << endl;
cout << "逆置后数组:" << endl;
for (int i = n - 1; i >= 0; i--) {
cout << arr[i] << "\t";
}
cout << endl;
return 0;
}

END