螺旋队列问题之二

如矩阵

    1    2    3    4    5
   16   17   18   19    6
   15   24   25   20    7
   14   23   22   21    8
   13   12   11   10    9

  找出规律,并打印出一个N*N的矩阵;规律就是从首坐标开始顺时针增大,所以

    1.需要一个变量m来递增记录进度。

    2.注意各个转折点。

具体代码实现如下:

#include <stdio.h>
#define N 5
int a[N][N]={0};

void fun(int n)
{
        int i,j;
        int m=1;
        for(i=0;i<n/2;i++)
        {
                for(j=i;j<n-i;j++)         //上边的一行
                {
                        a[i][j]=m++;
                }
                for(j=i+1;j<n-i;j++)       //右边的一列
                {
                        a[j][n-i-1]=m++;
                }
                for(j=n-i-2;j>i;j--)       //下边的一行
                {
                        a[n-i-1][j]=m++;
                }
                for(j=n-i-1;j>i;j--)       //左边的一列
                {
                        a[j][i]=m++;
                }
        }
        if(n%2==1)
                a[n/2][n/2]=m;
}

int main(void)
{
        int i,j;
        fun(N);
        for(i=0;i<N;i++)
        {
                for(j=0;j<N;j++)
                {
                        printf("%5d",a[i][j]);
                }
                printf("\n");
        }
        return 0;
}

别忘记考虑到n为奇数的情况下,需要加上最后的判断

结果如下:

[[email protected] tmp]# ./2
    1    2    3    4    5    6    7
   24   25   26   27   28   29    8
   23   40   41   42   43   30    9
   22   39   48   49   44   31   10
   21   38   47   46   45   32   11
   20   37   36   35   34   33   12
   19   18   17   16   15   14   13
时间: 2024-11-10 07:24:49

螺旋队列问题之二的相关文章

螺旋队列顺时针方向 和逆时针方向的实现

这个博主找规律的部分写得很好,原样放在下面.最后给出了顺时针和逆时针方向的螺旋队列的实现,可以看出它们的差别如此之小. 和螺旋队列类似,也是找规律的zigzag数组见这个帖子. 螺旋队列的样子如下图: 两大规律: 1.螺旋规律 2.奇数(圈数,或X轴正坐标)平方规律(紫线) 问题描述: 设1的坐标是(0,0),x方向向右为正,y方向向下为正,例如,7的坐标为(-1,-1),2的坐标为(1,0).编程实现输入任意一点坐标(x,y),输出所对应的数字! 问题解决: 从紫线突破. 从图中不难发现,每圈

螺旋队列问题

1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 #define max(a,b) ((a)>(b) ? (a) : (b)) 5 #define abs(a) ((a)>0 ? (a) : (-a)) 6 int foo(int x, int y) 7 { 8 int t = max(abs(x),abs(y)); 9 int v; 10 int u = 2 * t -1; 11 u =

并发无锁队列学习之二【单生产者单消费者】

1.前言 最近工作比较忙,加班较多,每天晚上回到家10点多了.我不知道自己还能坚持多久,既然选择了就要做到最好.写博客的少了.总觉得少了点什么,需要继续学习.今天继续上个开篇写,介绍单生产者单消费者模型的队列.根据写入队列的内容是定长还是变长,分为单生产者单消费者定长队列和单生产者单消费者变长队列两种.单生产者单消费者模型的队列操作过程是不需要进行加锁的.生产者通过写索引控制入队操作,消费者通过读索引控制出队列操作.二者相互之间对索引是独享,不存在竞争关系.如下图所示: 2.单生产者单消费者定长

消息队列入门(二)消息队列的开源实现

消息队列入门(二)消息队列的开源实现 关于AMQP AMQP 是 Advanced Message Queuing Protocol,即高级消息队列协议.AMQP不是一个具体的消息队列实现,而 是一个标准化的消息中间件协议.目标是让不同语言,不同系统的应用互相通信,并提供一个简单统一的模型和编程接口.目前主流的ActiveMQ和RabbitMQ都支持AMQP协议. AMQP相关的角色和职责 Producer 消息生产者 一个给exchange发送消息的程序,发送方式大致是:它首先创建一个空消息,

Java并发框架——AQS阻塞队列管理(二)

看Craig, Landin, and Hagersten发明的CLH锁如何优化同步带来的花销,其核心思想是:通过一定手段将所有线程对某一共享变量轮询竞争转化为一个线程队列且队列中的线程各自轮询自己的本地变量.这个转化过程由两个要点,一是构建怎样的队列&如何构建队列,为了保证公平性,构建的将是一个FIFO队列,构建的时候主要通过移动尾部节点tail实现队列的排队,每个想获取锁的线程创建一个新节点并通过CAS原子操作将新节点赋予tail,然后让当前线程轮询前一节点的某个状态位,如图2-5-9-3,

二叉树的层次遍历(队列) and 二叉搜索树的后序遍历序列

(一)从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印.[层次遍历] 从上到下打印二叉树的规律:每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾.接下来到队列的头部取出最早进入队列的节点,重复前面的操作,直至队列中所有的节点都被打印出来为止. //二叉树的层次遍历#include<iostream>#include<queue>using namespace std; typedef int ElemType;typedef st

Python之路第一课Day10--随堂笔记(异步IO\数据库\队列\缓存之二)

一.RabbitMQ队列 1.安装: a.官网: 安装 http://www.rabbitmq.com/install-standalone-mac.html b.安装python rabbitMQ module pip install pika or easy_install pika or 源码 https://pypi.python.org/pypi/pika 2.实现最简单的队列通信 a.示意图 3.代码: a.send端 #!/usr/bin/env python import pik

十一、实现队列的方法二(单链表的复用)

通过对单链表代码的复用,实现队列 一.LinkList.h #ifndef _LINKLIST_H_ #define _LINKLIST_H_ typedef void LinkList; typedef struct _tag_LinkListNode LinkListNode; struct _tag_LinkListNode { LinkListNode* next; }; LinkList* LinkList_Create(); void LinkList_Destroy(LinkLis

数据结构Java实现——队列的“奇葩”二 优先级队列

写在前面 有很多时候,一些数据的存储不仅需要先进先出,而且还有根据数据的优先级来排序,也就是优先级高的一定先出去,优先级相同的先进先出,此时就会用到优先级队列 应用 其实优先级队列的应用十分广泛,比如说构造哈夫曼树算法,再比如在一些计算机操作系统中用优先级队列来来满足抢先式多任务操作系统等等等等 代码实现 1.优先级队列存储的数据元素的描述 package org.Stone6762.entity; /** * @ClassName_PriorityQData优先级队列的结点中的数据部分的描述