Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <sstream>
- using namespace std;
- void printVec(vector<vector<int>> &vec)
- {
- for (auto &v : vec)
- {
- for (auto &i : v)
- cout << i << " ";
- cout << endl;
- }
- cout << endl;
- }
- void rotateVec(vector<vector<int>> &vec, int rotations)
- {
- int currM = 0, currN = 0;
- int rowSize = vec.size(), colSize = vec[0].size();
- do
- {
- int numLoops = rotations % (rowSize * 2 + colSize * 2 - 4);
- // rotate numLoops times for each layer of rectangle
- for(int iter = 0; iter < numLoops; iter++)
- {
- auto first = vec[currM][currN];
- // right
- for (int i = 0; i < colSize - 1; i++)
- {
- vec[currM][currN] = vec[currM][currN + 1];
- currN++;
- }
- // down
- for (int i = 0; i < rowSize - 1; i++)
- {
- vec[currM][currN] = vec[currM + 1][currN];
- currM++;
- }
- // left
- for (int i = 0; i < colSize - 1; i++)
- {
- vec[currM][currN] = vec[currM][currN - 1];
- currN--;
- }
- // up
- for (int i = 0; i < rowSize - 1; i++)
- {
- vec[currM][currN] = vec[currM - 1][currN];
- currM--;
- }
- vec[currM + 1][currN] = first;
- }
- // modify parameters and get ready for one level of inner rectangle
- rowSize -= 2;
- colSize -= 2;
- currM++;
- currN++;
- } while (rowSize > 0 && colSize > 0);
- }
- int main()
- {
- int rowSize;
- int colSize;
- int rotations;
- cin >> rowSize;
- cin >> colSize;
- cin >> rotations;
- // generate 2d array
- vector<int> inner(colSize);
- vector<vector<int>> test(rowSize, inner);
- // read the input 2d-array
- for (int rowPos = 0; rowPos < rowSize; rowPos++)
- for (int colPos = 0; colPos < colSize; colPos++)
- cin >> test[rowPos][colPos];
- // rotate
- rotateVec(test, rotations);
- // print the result
- printVec(test);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement