数组循环左移,不用另外数组情况下,可以有两种做法。一种是依次向左交换n次,一共m次,交换次数较多,所以有个很巧的方法,就是对数组做三次翻转,假设给定4,2,1234,第一次整个翻转,如1234变为4321, 然后第二次前n-m位做翻转,变为3421,最后后面翻转,变为3412,完成.
#include<iostream>
#include<vector>
using namespace std;
void Swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int m, n;
cin >> m >> n;
n=n%m;
vector<int>v;
int x;
for (int i = 0; i < m; i++) {
cin >> x;
v.push_back(x);
}
//三次翻转
for (int i = 0, j = m - 1; i < j; i++, j--) {
Swap(v[i], v[j]);
}
for (int i = 0, j = m - n - 1; i < j; i++, j--) {
Swap(v[i], v[j]);
}
for (int i = m - n, j = m - 1; i < j; i++, j--) {
Swap(v[i], v[j]);
}
//print
for (int i = 0; i < m-1; i++) {
cout << v[i] << ' ';
}
cout << v[m - 1];
return 0;
}
然后写了数列求和,两个月前写过一次;
(97条消息) PTA-数列求和加强版_大二转专业的博客-CSDN博客_pta数列求和加强版
总结:随后写的几题都差点意思,准备每天写4题,1个月把数据结构的两个习题册刷一遍。