写个简单的螺旋打印矩阵程序-C

#include<stdio.h>
#define PRINT(x) printf("%03d ",(x))
void spiral_matrix_print(const int matrix[][4],int rows,int columns)
{
	int top,left,i;
	int bottom = rows-1;
	int right = columns-1;
	top = left = i =0;
	while(bottom>=top && right>=left)
	{
		for(i=left;i<=right;i++)//top
			PRINT(matrix[top][i]);
		if(++top>bottom) break;

		for(i=top;i<=bottom;i++)//right
			PRINT(matrix[i][right]);
		if(--right<left) break;

		for(i=right;i>=left;i--)//bottom
			PRINT(matrix[bottom][i]);
		if(--bottom<top) break;

		for(i=bottom;i>=top;i--)//left
			PRINT(matrix[i][left]);
		left++;
	}
}

int
main()
{
	int m[3][4] = {1,2,3,4,
		      10,11,12,5,
		      9,8,7,6};

	int i,j;
	spiral_matrix_print(m,3,4);
	return 0;
}

好多公司面试的时候会让写这个小程序,闲着没事写了一个。

这个是简单的从原点开始的顺时针打印。当然逆时针的稍微改下就ok了。

如果可以任意设置起始点的话,就不能用这种方法了。

时间: 2024-07-30 12:15:06

写个简单的螺旋打印矩阵程序-C的相关文章

简单螺旋打印矩阵 - 直接, 好理解

打印螺旋矩阵的一种简单办法 , C 语言实现 #include <stdio.h> #define N 30 static int val = 10; int arr[N][N]; void print_row(int row_cur, int col_start, int col_end, int left_to_right){ int col_cur = col_start; if( col_start < 0 || col_end < 0) return; if( left_

用一门非常小众的语言REBOL写日历(万年历)打印的程序

先上效果图由于课程设置,选修了一门非常非常小众的REBOL语言的程序设计概论,就自己观点来看,这门语言小众,语法晦涩,教材也不太好,书中作者试图一直把我们以门外汉这样灌输知识给我们,我觉得这点作者做的不是特别好,比如说流行语言中的变量,用书中作者的话就变成了单字...赋值就是设字...这看来非常的不专业,而且某种程度上貌似在拐弯,这是我对这本教材不能接受的地方.当然,对于初学者来说,这无可厚非.欸,怪我怪我,来了这么渣的专业,全机电学大物3,就我们班学大物2(2比3难),你说一堆搞机器人的学的比

螺旋打印矩阵

题目: 对于一个N*M矩阵,请顺时针螺旋打印输出: 如 3 * 4 矩阵, 1   2   3  4 10 11 12 5 9    8   7  6 输出: 1 2 3 4 5 6 7 8 9 10 11 12 1 #include <stdio.h> 2 // nomally print matric 3 void print_matric(const int *m, int r, int c) { 4 int i, j; 5 printf("%d * %d matric:\n&

使用python中的smtplib库,写一个简单的发送qq邮件程序,速成!!

#-*-coding:utf-8-*- import smtplib from  smtplib import SMTP_SSL from email.mime.text import MIMEText from email.header import Header #定义一个字典存储发送和接收,邮箱账号密码主题.内容及编码相关信息 mail_info = {     "from": "[email protected]",  #发件人     "to&q

用Spark写一个简单的wordcount词频统计程序

public class WordCountLocal {  public static void main(String[] args) {   SparkConf conf = new SparkConf().setAppName("WordCountLocal").setMaster("local[2]");      JavaSparkContext sc = new JavaSparkContext(conf);   JavaRDD<String&g

ASP.NET 使用application和session对象写的简单聊天室程序

ASP.Net中有两个重要的对象,一个是application对象,一个是session对象. Application:记录应用程序参数的对象,该对象用于共享应用程序级信息. Session:记录浏览器端的变量对象,用来存储跨网页程序程序的变量或者对象. 说实话,写了快一年的asp.net,application对象还真没怎么用过.看了看书,根据这两个对象的特性写了一个简单的聊天室程序.真的是非常的简陋. 我的思路是,有两个页面Default页和ChatRoom页,页面布局如图: Default

DuiVision开发教程(2)-如何写一个简单的界面程序

基于DuiVision界面库开发的界面程序主要包括如下几部分内容: 1.资源定义,包括图片资源.各个窗口界面的xml定义文件 2.事件处理类代码,用于处理界面响应消息 3.其他业务逻辑代码 下面举例说明如何写一个简单的界面程序. 第一步:使用VC向导创建一个有两个tab页面的DuiVision工程 向导生成的解决方案文件如下: 默认有两个工程,分别是DuiVision库和应用程序工程.自动生成的代码目录中bin目录下的内容那个如下,bkimg目录存放窗口背景图片,skins目录存放图片资源,xm

DuiLib学习笔记2——写一个简单的程序

我们要独立出来自己创建一个项目,在我们自己的项目上加皮肤这才是初衷.我的新建项目名为:duilibTest 在duilib根目录下面有个 Duilib入门文档.doc 我们就按这个教程开始入门 首先新建一个win32项目 去DuiLib根目录,把目录下DuiLib文件夹拷贝到新建项目的根目录.再把这个项目添加进我们解决方案中. 从教程里面把以下代码粘贴到我们项目的stdafx.h中 // Duilib使用设置部分 #pragma once #define WIN32_LEAN_AND_MEAN

《程序员代码面试指南》第八章 数组和矩阵问题 &quot;之&quot;字形打印矩阵

题目 "之"字形打印矩阵 java代码 package com.lizhouwei.chapter8; /** * @Description: "之"字形打印矩阵 * @Author: lizhouwei * @CreateDate: 2018/4/28 22:53 * @Modify by: * @ModifyDate: */ public class Chapter8_3 { public void printMatrixZigZag(int[][] matri