《程序员面试宝典》之螺旋队列问题学习
来源:互联网 发布:nginx ffmpeg 点播 编辑:程序博客网 时间:2024/06/01 21:10
1.由内向外螺旋队列查找指定位置数值问题。
#include <iostream>#include <stdio.h>using namespace std;#define max(a,b) (a < b ? b : a)#define abs(a) (a > 0 ? a : -a)int MatrixCircle(int x, int y){/************************************************************************* |北|上 * | 7 8 9 * 西|左 ————————————>x(+) 东|右 6 1 2 * |0(0,0) 5 4 3* |* \|/y(+) 南|下 注明: 默认起始坐标(0,0)对应数值1* x表示列, y表示行************************************************************************/int t = max(abs(x), abs(y));// 确定所在层tint u = t + t; // u = 2tint v = u - 1; // v = 2t-1v = v * v + u; // v = (2t-1)^2 + 2tif(x == -t) // 队列增长方向与Y轴反向, 正西方向(y=0)数值(2t-1)^2+5t, v = (2t-1)^2+5t-y{v += u + t -y; // v = (2t-1)^2 + 2t + 2t + t - y = (2t-1)^2 + 5t - y}else if(y == -t) // 队列增长方向与X轴同向, 正北方向(x=0)数值(2t-1)^2+7t, v = (2t-1)^2+7t+x { v += 3*u + x - t; // v = (2t-1)^2 + 2t + 3*2t + x - t = (2t-1)^2 + 7t + x }else if(y == t) // 队列增长方向与X轴反向, 正南方向(x=0)数值(2t-1)^2+3t, v = (2t-1)^2+3t-x { v += t - x; // v = (2t-1)^2 + 2t + t - x = (2t-1)^2 + 3t - x } else // 队列增长方向与Y轴同向, 正东方向(y=0)数值(2t-1)^2+t, v = (2t-1)^2+t+y { v += y - t; // v = (2t-1)^2 + 2t + y - t = (2t-1)^2 + t + y }return v;}int main(){cout << "Expection 7: " << MatrixCircle(-1, -1) << endl;cout << "Expection 2: " << MatrixCircle(1, 0) << endl;cout << "Expection 3: " << MatrixCircle(1, 1) << endl;cout << "Expection 1: " << MatrixCircle(0, 0) << endl;return 0;}
2.顺时针递增矩阵打印
#include <iostream>using namespace std;int a[10][10] = {0};void OuterCircle(int n){int m = 1, j, i;for (i = 0; i < n/2; i++){for (j = 0; j < n-i; j++) // 左-->右:每次顺时针循环的左上角到右上角{if(a[i][j] == 0)a[i][j] = m++;}for (j = i + 1; j < n-i-1; j++)// 上-->下:每次顺时针循环的右上角到右下角{if(a[j][n-1-i] == 0)a[j][n-1-i] = m++;}for (j = n-i-1; j > i; j--)// 右-->左:每次顺时针循环的右下角到左下角{if(a[n-i-1][j] == 0)a[n-i-1][j] = m++;}for (j = n-i-1; j > i; j--)// 下-->上:每次顺时针循环的左下角到右上角{if(a[j][i] == 0)a[j][i] = m++;}}// n为奇数时,最后顺时针递增矩阵中心只剩一个元素if (n%2 == 1){a[n/2][n/2] = m;}}int main(){cout << "Please input the int number for NxN matrix outercircle: " << endl;int n;cin >> n;cout << endl;// NxN矩阵由外向内顺时针循环打印矩阵值!OuterCircle(n);for (int j = 0; j < n; j++){for(int i = 0; i < n; i++){cout << a[j][i] << "\t";}cout << endl;}return 0;}
0 0
- 《程序员面试宝典》之螺旋队列问题学习
- 程序员面试宝典之螺旋队列
- 《程序员面试宝典》螺旋队列坐标输出
- 【程序员面试宝典读书笔记】螺旋队列
- 程序员面试宝典——螺旋队列解法解析
- 程序员面试宝典——螺旋队列解法解析2
- 程序员面试宝典:螺旋队列第1题
- 《程序员面试宝典》指针问题
- c++面试准备之螺旋队列
- 多态---程序员面试宝典学习
- 程序员面试宝典-学习1
- 程序员面试宝典题目-栈、队列
- 《程序员面试宝典-第四版》之递归学习
- 程序员面试之道(《程序员面试笔试宝典》)之如何回答算法设计问题?
- 程序员面试之道(《程序员面试笔试宝典》)之如何回答算法设计问题?
- #面试#螺旋队列
- 程序员面试宝典之数据结构基础----队列的入队与出队
- 程序员面试宝典之数据结构基础----C++两个栈实现一个队列功能
- gluPerspective and gluLookAtmain.c
- android:启动服务;广播(最高优先窃听信息)并转发给别人
- 大一C语言课程设计--飞机订票系统
- 经典汉诺塔
- 杭电1018
- 《程序员面试宝典》之螺旋队列问题学习
- MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析
- 杭电1019
- 杭电1060
- HUT 排序训练赛 G题
- 对杭电彻底无语
- 理解 约瑟夫环
- 2034人见人爱A-B
- ARM 汇编指令条件执行详解