行列方阵顺时针旋转
时间紧张,先记一笔,后续优化与完善。
例如,如下的方阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
顺时针旋转,是却如下结果:
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4
#include <stdio.h> void rotate(int* x, int rank) { int* y = (int*)malloc(sizeof(int) * rank * rank); for(int i=0; i<rank * rank; i++) { // 以原第一行停止分析 一行数变成一同列 以原第一列为例,变成一同行。 (i%rank)*rank使列变成行 rank-(i/rank)-1) 使行变成列 y[(i%rank)*rank+(rank-(i/rank)-1) ] = x[i]; } for(i=0; i<rank*rank; i++) { x[i] = y[i]; } free(y); } int main(int argc, char* argv[]) { int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; int rank = 4; rotate(&x[0][0], rank); for(int i=0; i<rank; i++) { for(int j=0; j<rank; j++) { printf("%4d", x[i][j]); } printf("\n"); } return 0; }
文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。