螺旋队列

螺旋矩阵:要求输入(x,y),输出螺旋矩阵中相应的元素。

int printfSpiralMatrix(int x,int y)
    {
        int Max = abs(x) > abs(y) ? abs(x) : abs(y);
        int Result;
        if (Max == x)          // x 正半轴
        {
            if (Max == -y)     //会突变
                Result = pow((Max * 2 + 1), 2);
            else
                Result = pow((Max * 2 - 1), 2) + Max + y;
        }
        else if (Max == -x)    // x 负半轴
            Result = pow((Max * 2 - 1), 2) + 5 * Max - y;
        else if (Max == y)     // y 正半轴
            Result = pow((Max * 2 - 1), 2) + 3 * Max - x;
        else                   // y 负半轴
            Result = pow((Max * 2 - 1), 2) + 7 * Max + x;
        return Result;
    }

打印螺旋矩阵中某一个元素

时间: 2024-10-07 21:38:11

螺旋队列的相关文章

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

这个博主找规律的部分写得很好,原样放在下面.最后给出了顺时针和逆时针方向的螺旋队列的实现,可以看出它们的差别如此之小. 和螺旋队列类似,也是找规律的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 =

用C++实现顺时针增加的螺旋队列

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATgAAAB6CAYAAAArmE+5AAAN/ElEQVR4Ae1d244cSRHtrmmPDV/lv4AH1iwIcZGQgL18B2/wCyDxC4AFL0hYWp7gGxDSwopdGUarbSp6fMrRMZGXamY8FZGnpHZmxi3jnMjMqZ6pbu//+Ic/HX/3+9/ufv2r3+x4kQEyQAYyMXD42tefnQ63v/7tk0y4iIU

螺旋队列和hiho1525逃离迷宫3

我是真调不出错误了! hiho1525逃离迷宫3 #include <stdio.h> #include <stdlib.h> #include <math.h> //中间变量为长整形,so x,y变量一定要设置为长整型 long long cal(long long x,long long y) { if (x<=y && y<=-x && x<=0) return (4*x*x-3*x+y)%26; else if

螺旋队列问题之二

如矩阵 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+

语言总结&mdash;C/C++

参考<程序员面试宝典> 1. 基本概念 1.1 赋值语句 例1. 按位与操作,例如:a=3,b=3,a&b值等于 0011 & 0011 结果还是0011,那么值还是3: a=4,b=3,a|b:按位或操作, 0100 | 0011 结果是0111,输出的值为7:a||b, a和b进行或运算,只要两者有一个为真则结果即为1. 例2. while(x) { count++; x=x&(x-1);} 此循环用来求输入值x转化为二进制后1的个数.eg:9(1001)&

算法题库

1. 时针分针重合几次 表面上有60个小格,每小格代表一分钟, 时针每分钟走1/12小格,分针每分钟走1小格,从第一次重合到第二次重合分针比时针多走一圈即60小格,所以 60/(1-1/12)=720/11 每隔720/11分才重合一次(而并不是每小时重合一次) 1440里有22个720/11,如果说算上0点和24点,那也是重合23次而已,但我觉得0点应该算到前一天的24点头上,所以每一天循环下来重合22次啊 2. 找出字符串的最长不重复子串,输出长度 建一个256个单元的数组,每一个单元代表一

如何打印矩阵

如何打印矩阵 顺时针方向打印矩阵 如何顺时针打印一个矩阵的元素呢,例如:如果输入如下矩阵: 1              2              3              45              6              7              89              10           11           1213           14           15           16 则依次打印出数字:1, 2, 3, 4, 8, 12,

redis 学习 四 队列

<?php /** * redis实战 * * 利用列表list实现简单队列 * * @example php cache.php */ header('content-type:text/html;chaeset=utf-8'); $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); // 进队列 $userId = mt_rand(000000, 999999); $redis->rpush('QUEUE_NAME',j