前置 {#前置}
无聊开个新坑,最近学校在学 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