我这个菜鸟接触数组翻转时,有第一种思路
1 先把最后一个赋给临时变量
2其他元素后移
3最后一位赋给第一位
在c++中,有一个函数是 reverse,他的作用是翻转
reverse(参数1 开始位置,参数2 结束位置);
下面给出一道acwing讲的题目做示范(本题做法和思路来源于acwing)
数组翻转,第一行输入2个数 第一个数代表输入几个数 第二个代表翻转几次
翻转例如:1 2 3 翻转1次 => 3 1 2
给出普通思路代码:
#include "iostream"
using namespace std;
int main(){
//数组旋转 普通做法 先把最后一个赋给临时变量 其他元素后移 最后一位赋给第一位
int a[100];
int n,k;
cin>>n>>k;
for(int i = 0; i < n; i++) cin>>a[i];
while(k--){
int t = a[n-1];
for(int i = n-2; i >= 0; i--)
a[i+1] = a[i];
a[0] = t;5
}
for(int i = 0; i < n; i++) cout<<a[i]<<endl;
return 0;
}
线性级的做法:
#include "iostream"
#include "algorithm"
using namespace std;
//第一步先将数组翻转
//第二步将前k个翻转
//第三步将后面的翻转
int main(){
int n,k;
int a[100];
cin>>n>>k;
for(int i = 0; i < n; i++) cin>>a[i];
reverse(a,a+n);
reverse(a,a+k);
reverse(a+k,a+n);
for(int i = 0; i < n; i++) cout<<a[i]<<endl;
return 0;
}