#include <stdio.h>
#include <memory>
int main() {
const int nrows = 4, ncols = 5;
const int dx = 2, dy = 1;
int a[4][5] = { {1, 2, 3, 4, 5},
{ 6, 7, 8, 9, 10 },
{ 11, 12, 13, 14, 15 },
{ 16, 17, 18, 19, 20 }
};
int tmp[4][5];
for (int i = 0; i < nrows; i++)
for (int j = 0; j < ncols; j++)
tmp[(i + dx) % nrows][(j + dy) % ncols] = a[i][j];
memcpy(a, tmp, sizeof(tmp));
for (int i = 0; i < nrows; i++)
for (int j = 0; j < ncols; j++)
printf(j < ncols - 1 ? "%3d " : "%3d\n", a[i][j]);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtZW1vcnk+CgppbnQgbWFpbigpIHsKCWNvbnN0IGludCBucm93cyA9IDQsIG5jb2xzID0gNTsKCWNvbnN0IGludCBkeCA9IDIsIGR5ID0gMTsKCWludCBhWzRdWzVdID0geyB7MSwgMiwgMywgNCwgNX0sIAoJCXsgNiwgNywgOCwgOSwgMTAgfSwKCQl7IDExLCAxMiwgMTMsIDE0LCAxNSB9LAoJCXsgMTYsIDE3LCAxOCwgMTksIDIwIH0KCX07CglpbnQgdG1wWzRdWzVdOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBucm93czsgaSsrKQoJCWZvciAoaW50IGogPSAwOyBqIDwgbmNvbHM7IGorKykKCQkJdG1wWyhpICsgZHgpICUgbnJvd3NdWyhqICsgZHkpICUgbmNvbHNdID0gYVtpXVtqXTsKCW1lbWNweShhLCB0bXAsIHNpemVvZih0bXApKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbnJvd3M7IGkrKykKCQlmb3IgKGludCBqID0gMDsgaiA8IG5jb2xzOyBqKyspCgkJCXByaW50ZihqIDwgbmNvbHMgLSAxID8gIiUzZCAiIDogIiUzZFxuIiwgYVtpXVtqXSk7Cn0=