顺时针打印方阵


1. 描述

给定一方阵,顺时针打印方阵的值,如方阵:

                                        1, 2, 3, 4

                                        5, 6, 7, 8

                                        9,10,11,12

                                        13,14,15,16

则打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10


2. 思路

从外到内每一次打印有4条边组成的方框,如

(1)第一条边1,2,3

(2)第二条边4,8,12

(3)第三条边16,15,14

(4)第四条边13,9,5


代码如下:

void printMatrixClockwise(int n, int matrix[][n]) //n行n列,矩阵matrix下标从0开始
{
	int i, j;
	for (i = 0; i < n - (n >> 1); i++)
	{
		for (j = i; j < n - i - 1; j++)     //第一条边
			printf("%d ", matrix[i][j]);
		if ((n & 1) == 0 || i != n - (n >> 1) - 1) printf("\n");

		for (j = i; j < n - i - 1; j++)     //第二条边
			printf("%d ", matrix[j][n - i - 1]);
		if ((n & 1) == 0 || i != n - (n >> 1) - 1) printf("\n");
		
		for (j = n - i - 1; j > i; j--)     //第三条边
			printf("%d ", matrix[n - i - 1][j]);
		if ((n & 1) == 0 || i != n - (n >> 1) - 1) printf("\n");
		
		for (j = n - i - 1; j > i; j--)     //第四条边
			printf("%d ", matrix[j][i]);
		if ((n & 1) == 0 || i != n - (n >> 1) - 1) printf("\n");
	}
	if (n & 1)    //如果n是奇数的时候,最中间的那个元素在上面的循环中打印不出来
		printf("%d\n", matrix[n >> 1][n >> 1]);	
}

测试如下:

#include <stdio.h>

void printMatrixClockwise(int n, int matrx[][n]);
int main(void)
{
	int matrix[5][5] = {1, 2, 3, 4, 0, 
					  5, 6, 7, 8, 0,
					  9, 10, 11, 12, 0, 
					  13, 14, 15, 16, 0,
					  17, 18, 19, 20, 21,
					};	
	int matrix2[4][4] = {1, 2, 3, 4, 
					  5, 6, 7, 8, 
					  9, 10, 11, 12,
					  13, 14, 15, 16,
					};	
	int n = 5, n2 = 4;
	printf("matrix:\n");
	printMatrixClockwise(n, matrix);
	printf("matrix2:\n");
	printMatrixClockwise(n2, matrix2);
	return 0;
}

输出:


当矩阵的行数与列数不相等是也是类似的。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值