题目:逆时针打印矩阵元素
#include <stdio.h> #include <malloc.h> int main() { int dimension; int *p; int startx, starty, endx, endy; int i, j, value = 0; printf("Please input dimension:"); scanf("%d", &dimension); p = (int *)malloc(sizeof(int)*dimension*dimension); startx = 0; starty = 0; endx = dimension - 1; endy = dimension - 1; while(startx <= endx) { if(startx == endx) //只剩一个点需要赋值 { p[endy*dimension+endx] = value++; break; } for(i = starty, j = startx; i <= endy; i++) //从上到下 { p[i*dimension+j] = value ++; } for(i-=1, j = startx+1; j <= endx; j++) //从左到右, i在从上到下的输入中已经超出了矩阵范围,所以需要减1 { p[i*dimension+j] = value++; } for(j-=1, i -= 1; i >= starty; i--) //从下到上 { p[i*dimension+j] = value++; } for(i+=1, j -= 1; j > starty; j--) //从右到左 { p[i*dimension+j] = value++; } startx ++; starty ++; endx --; endy --; } for(i = 0; i < dimension*dimension; i++) { if(0 == i%dimension) printf(" "); printf("%3d ", p[i]); } printf(" "); return 0; }
运行效果如下:
本文主要参考:http://blog.csdn.net/laoniu_c/article/details/38085767