前置
无聊开个新坑,最近学校在学 C++ ,那么这边也跟进一下实操分析。
主要还是当备忘录使的,[保存回家路线,防止迷路(bushi)]
本蒟蒻 C++ 其实很菜的,各位大佬别喷 www。
本题难度:入门
代码中只有数组,没有逆置函数、指针等,请放心食用。(什)
题目
现在输入数据,要求在输入前询问需要输入的数据个数,记为 n,接着接收这 n 个数据保存到数组中,然后输出逆置 (Reverse) 后的数组。
样例输入:
样例输出:
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]; } 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 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