最近在y总课上学习了利用reverse实现数组反转,比两层for更加遍历
题目:
输入一个
n
n
n,再输入
n
n
n 个整数。将这个数组顺时针旋转
k
(
k
≤
n
)
k(k \le n)
k(k≤n) 次,最后将结果输出。
旋转一次是指:将最左边的数放到最右边。
普通方法
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int num[100];
int n,k;
cin >> n >> k;
for(int i = 0;i < n;i++){
cin >> num[i];
}
while(k--){
int temp = num[n-1];
for(int i = n-2;i >= 0;i --){
num[i+1] = num[i];
}
num[0] = temp;
}
for(int i = 0;i < n;i++){
cout << num[i] << " ";
}
cout << endl;
return 0;
}
改进方法
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n,k;
cin >> n >> k;
int num [n];
for(int i=0;i<n;i++){
cin >> num[i];
}
//第一次翻转,对数组进行整体翻转
reverse(num,num+n);
//第二次翻转,对数组前一半进行翻转
reverse(num,num+k);
//第三次翻转,对数组后一半进行翻转
reverse(num+k,num+n);
for(int i=0;i<n;i++){
cout << num[i] << " ";
}
cout << endl;
return 0;
}