最优解法——7-3 将数组中的数逆序存放 (20 分)——10行代码AC

励志用尽量少的代码做高效的表达。


题目描述

本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。

输入格式:
输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。

输出格式:
在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。

输入样例:
4
10 8 1 2

输出样例:
2 1 8 10


分析:

本题的实质是考察数组或容器的倒序运算。
解法1:STL容器中vector容器操作。 定义int型容器,逐个存入数字后,从容器顶依次输出即为倒叙。优点是时间复杂度较小:O(n),缺点是代码相对较长。

解法2:使用algorithm头文件中的reverse()函数翻转。 存入数组后,直接调用翻转函数即可。优点是代码简洁,只有10行;缺点是时间复杂度较大:O(nlogn)。

传送门1——>懒癌的福音——algorithm头文件函数全集
强烈推荐读者把两种解法都尝试一下,都是很常用的方法。


代码1:vector解法

 #include
 #include
 #include
 
 using namespace std  ;
 
 int main ()
 {
 	int n , b ;
 	vector<int>a1;   //vector数组
 	cin >> n ;
 	for ( int i = 0 ; i < n ; i ++ )
 	{
 		scanf ("%d",&b);           //scanf配合push输入
 		a1.push_back(b) ; 
	 }
	 for ( int j = n ; j > 0 ; j -- )   //倒序输出
	 {
	 	if ( j != 1 )
	 	printf ( "%d " , a1[j-1] ) ;      
	 	else if ( j == 1 )
	 	printf ( "%d" , a1[0] ) ;         //最后一个数字没有空格
	 }
 	return 0 ;
 }

代码2:reverse()解法

#include 		//万能头文件 
using namespace std; 
int main() {
	int n, a[10]; cin >> n; 
	for(int i = 0; i < n; i++) cin >> a[i];
	reverse(a, a+n);
	for(int i = 0; i < n; i++) 
		cout << (i == 0 ? "" : " ") << a[i];
	return 0;
}

总结:

建立vector容器的五种操作:

vectorv1; vector保存类型为T的对象。默认构造函数v1为空。
vectorv2(v1); v2是v1的一个副本。
vectorv3(n,i); v3包含n个值为i的元素。
vectorv4(a,a+4); 利用a[MAX]数组赋值
vectorv5(v4.begin(),v4.end()) ; //利用另一个容器和函数赋值

常用函数:

1.push_back() 在数组的最后添加一个数据
2.pop_back() 去掉数组的最后一个数据
4.begin() 得到数组头的指针
5.end() 得到数组的最后一个单元+1的指针
6.front() 得到数组头的引用
7.back() 得到数组的最后一个单元的引用
10.size() 当前使用数据的大小
13.erase() 删除指针指向的数据项
14.clear() 清空当前的vector
17.empty() 判断vector是否为空
18.swap() 与另一个vector交换数据
19.insert() 插入

传送门——>懒癌的福音——algorithm头文件函数全集


择苦而安,择做而乐,虚拟现实终究比不上真实精彩之万一。

你可能感兴趣的:(c++,数据结构,算法)