顺时针打印矩阵

P128顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:

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

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>  
#include<stdlib.h>  
void printMatrix(int **matrix, int columns, int rows, int start)
{
int x = columns - start - 1;
int y = rows - start - 1;
int i;
for (i = start; i <= x; i++)//先打印一行  
printf("%d ", matrix[start][i]);
if (start<y)//从上往下  
{
for (i = start + 1; i <= y; i++)
printf("%d ", matrix[i][x]);
}
if (x>start&&y>start)//从右到左打印  
{
for (i = x - 1; i >= start; i--)
printf("%d ", matrix[y][i]);
}
if (x>start&&y>start + 1)//从下到上打印  
{
for (i = y - 1; i >= start + 1; i--)
printf("%d ", matrix[i][start]);
}
 
}
//循环结束的条件
void matrixClock(int **matrix, int columns, int rows)
{
if (matrix == NULL || columns <= 0 || rows <= 0)
return;
int start = 0;
while (columns>start * 2 && rows>start * 2)
{
printMatrix(matrix, columns, rows, start);
start++;
}
}
 
int main()
{
int n, m;
while (scanf("%d %d", &n, &m) != NULL)
{
int **numbers;
int i, j;
numbers = (int **)malloc(sizeof(int *)*n);//n rows  
for (i = 0; i<n; i++)
numbers[i] = (int *)malloc(sizeof(int)*m);//m columns  
for (i = 0; i<n; i++)
for (j = 0; j<m; j++)
scanf("%d", &numbers[i][j]);
matrixClock(numbers, m, n);
}
system("pause");
return 0;
}

结果:

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

时间: 2024-10-20 02:03:21

顺时针打印矩阵的相关文章

剑指offer 顺时针打印矩阵

题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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. 思路:一定要记住循环继续的条件是columns > start * 2,rows > start * 2; 一圈的打印分为四步: 第一步:无条件打印第一行,从左往右: 第二步:终止行号大于起始行号,打印最后一列,从上往下: 第

剑指offer顺时针打印矩阵python

题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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. 思路 分别给行和列设置两个数字作为边界值,每一次循环之后,缩小边界. 代码 # -*- coding:utf-8 -*- class Solution: # matrix类型为二维列表,需要返回列表 def print

剑指offer--26.顺时针打印矩阵

1,2,3,45,6,7,88,10,11,1213,14,15,16 每次输出第一行,然后删除第一行,逆时针旋转剩下的矩阵. ------------------------------------------------------------------------------------------------------------------------ 时间限制:1秒 空间限制:32768K 热度指数:430225 本题知识点: 数组 题目描述 输入一个矩阵,按照从外向里以顺时针的

剑指Offer18 顺时针打印矩阵

/************************************************************************* > File Name: 18_PrintMatrixClock.c > Author: Juntaran > Mail: [email protected] > Created Time: 2016年08月30日 星期二 17时32分28秒 **********************************************

剑指offer (20) 打印螺旋矩阵

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> result; int nRows = matrix.size(); if (nRows == 0) return result; int nCols = matrix.at(0).size()

剑指OFFER之打印1到最大的N位数(九度OJ1515)

题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例.对于每个测试案例,输入一个数字N(1<=N<=5). 输出: 对应每个测试案例,依次打印从1到最大的N位数. 样例输入: 1 样例输出: 1 2 3 4 5 6 7 8 9 解题思路: 直接通过n快速指定比最大的那个数大1的数,10,100,1000,10000,100000.... 输出,就行了... 代码: #include <stdio.h> int main(void){ int

剑指offer (12) 打印1到最大的n位数

题目描述: 给定一个数字N,打印从1到最大的N位数 此题需要注意以下几点: 1. 涉及到大数问题,因为并没有限定 n的取值范围,所以需要采取 字符数组模拟大数运算 2. 打印数字时 需要忽略前置0 3. 我们始终 以n位数为整体,n位所有十进制数其实是 n位从0到9的全排列,可以采用递归解决 我们从 数组下标0开始 (对应于数字最高位),每一位都有0到9取值,然后设置下一位,递归的结束条件是 设置位到了数组的最末端 1 void PrintNum(char* num) 2 { 3 char* c

剑指offer-顺时针打印矩阵-二维数组

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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. import java.util.ArrayList; public class Solution { public static ArrayList<Integer> printMatrix(int

【模板小程序】循环方阵构造(仿《剑指offer》循环矩阵打印)

1 /* 2 本程序说明: 3 4 输入:方阵大小n,输出:n*n的旋转方阵 5 6 举例: 7 当n=2时,输出: 8 1 2 9 4 3 10 当n=4时,输出: 11 1 2 3 4 12 12 13 14 5 13 11 16 15 6 14 10 9 8 7 15 16 */ 17 #include <iostream> 18 #include <vector> 19 20 using namespace std; 21 22 void PrintMatrixInCirc

[遇见时光]剑指offer-顺时针打印矩阵java

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列. 接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1&l