#include <stdio.h>
void print(int *arr, int sz, char *title) {
int i, j;
for(i = 0; i < sz; ++i) {
for(j
= 0; j
< sz
; ++j
) printf("%d\t", arr
[i
* sz
+ j
]); }
}
void rotate(int *arr, int sz) {
int i;
for(i = 0; i < sz / 2; ++i) {
int j, temp;
int index = i * sz + i;
const int tpi = index + sz;
temp = arr[index];
for(j = 1; j < sz - 2 * i; ++j, ++index) arr[index] = arr[index + 1];
for(j = 1; j < sz - 2 * i; ++j, index += sz) arr[index] = arr[index + sz];
for(j = 1; j < sz - 2 * i; ++j, --index) arr[index] = arr[index - 1];
for(j = 1; j < sz - 2 * i; ++j, index -= sz) arr[index] = arr[index - sz];
arr[tpi] = temp;
}
}
int main(void) {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int arr2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
print(arr, 3, "Input");
rotate(arr, 3);
print(arr, 3, "Output");
print(arr2, 4, "Input2");
rotate(arr2, 4);
print(arr2, 4, "Output2");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHByaW50KGludCAqYXJyLCBpbnQgc3osIGNoYXIgKnRpdGxlKSB7CglpbnQgaSwgajsKCXByaW50ZigiJXNcbiIsIHRpdGxlKTsKCWZvcihpID0gMDsgaSA8IHN6OyArK2kpIHsKCQlmb3IoaiA9IDA7IGogPCBzejsgKytqKSBwcmludGYoIiVkXHQiLCBhcnJbaSAqIHN6ICsgal0pOwoJCXByaW50ZigiXG4iKTsKCX0KfQoKdm9pZCByb3RhdGUoaW50ICphcnIsIGludCBzeikgewoJaW50IGk7Cglmb3IoaSA9IDA7IGkgPCBzeiAvIDI7ICsraSkgewoJCWludCBqLCB0ZW1wOwoJCWludCBpbmRleCA9IGkgKiBzeiArIGk7CgkJY29uc3QgaW50IHRwaSA9IGluZGV4ICsgc3o7CgkJdGVtcCA9IGFycltpbmRleF07CgkJZm9yKGogPSAxOyBqIDwgc3ogLSAyICogaTsgKytqLCArK2luZGV4KSBhcnJbaW5kZXhdID0gYXJyW2luZGV4ICsgMV07CgkJZm9yKGogPSAxOyBqIDwgc3ogLSAyICogaTsgKytqLCBpbmRleCArPSBzeikgYXJyW2luZGV4XSA9IGFycltpbmRleCArIHN6XTsKCQlmb3IoaiA9IDE7IGogPCBzeiAtIDIgKiBpOyArK2osIC0taW5kZXgpIGFycltpbmRleF0gPSBhcnJbaW5kZXggLSAxXTsKCQlmb3IoaiA9IDE7IGogPCBzeiAtIDIgKiBpOyArK2osIGluZGV4IC09IHN6KSBhcnJbaW5kZXhdID0gYXJyW2luZGV4IC0gc3pdOwoJCWFyclt0cGldID0gdGVtcDsKCX0KfQoKaW50IG1haW4odm9pZCkgewoJaW50IGFycltdID0gezEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDl9OwoJaW50IGFycjJbXSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNn07CglwcmludChhcnIsIDMsICJJbnB1dCIpOwoJcm90YXRlKGFyciwgMyk7CglwcmludChhcnIsIDMsICJPdXRwdXQiKTsKCXByaW50KGFycjIsIDQsICJJbnB1dDIiKTsKCXJvdGF0ZShhcnIyLCA0KTsKCXByaW50KGFycjIsIDQsICJPdXRwdXQyIik7CglyZXR1cm4gMDsKfQo=