螺旋队列相关的一个小算法
来源:互联网 发布:马杀鸡网络中什么意思 编辑:程序博客网 时间:2024/05/01 12:13
在《程序员面试宝典》上看到的一个例题,尝试做了一下发现居然花了不少时间才做出来,心底不由得升起了一阵的小恐慌——真正的笔试面试时哪来的很多时间给我来想啊!得勤加练习了!题目是这样的:
21
22
..
..
..
20
7
8
9
10
19
6
1
2
11
18
5
4
3
12
17
16
15
14
13
有如上的数字排列规律,设1的坐标是(0,0),X方向向右为正,Y方向向下为正。例如:7的坐标为(-1,-1),2的坐标为(1,0),3的坐标为(1,1)。编程实现输入任意一点坐标(x,y),输出所对应的数字。
分析:可以以每圈数字(如1在第0圈,2在第1圈,11在第2圈)的某个点为基准点来推算出,这里和书上的算法一样选择每圈的右下角点,设圈数为max,其通配式为(2*max-1)*(2*max-1)+2*max,然后分本圈的top边、left边、bottom边、right边来进行计算,则可有如下实现代码(Dev-C++ 4.9.9.2编译):
#include
int fun(int x, int y)
{
int max = (abs(x) >= abs(y)) ? abs(x) : abs(y);
int u = max + max;
int val = u - 1;
val = val * val + u; // 每一圈的右下角的点的值
/////////////先确定点所在边的正中间的点的值/////////////////
if (max == -y) // 若在本圈的top边
{
val += 5 * max + x;
}
else if (max == -x) // 若在本圈的left边
{
val += 3 * max - y;
}
else if (max == y) // 若在本圈的bottom边
{
val += max - x;
}
else // 若在本圈的right边
{
val += y - max;
}
return val;
}
int main()
{
while(true)
{
int x;
int y;
std::cout << "请输入横坐标:";
std::cin >> x;
std::cout << "请输入纵坐标:";
std::cin >> y;
std::cout << "此坐标处的数:" << fun(x,y) << std::endl;
}
return 0;
}
- 螺旋队列相关的一个小算法
- 螺旋队列算法的解法
- 螺旋矩阵、螺旋队列算法
- 螺旋队列最优算法的解法
- 【算法】螺旋队列
- 螺旋队列算法(YC)
- 螺旋队列算法分析
- 螺旋队列算法详解
- 螺旋队列-算法设计
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列算法分析
- 螺旋队列---算法分析
- 螺旋队列算法分析
- 1位软件工程师的6年总结收藏
- 短期目标(至十一假结束)
- [英语阅读]美国首现合法男妓服务
- Serializable - 序列化
- ORACLE常见问题1000问(之九)
- 螺旋队列相关的一个小算法
- unresolved external symbol __endthreadex问题解决方法
- 五分钟让你明白中国内需是怎么会事
- 网站制作素材
- 成功交际的6个秘诀
- 中融
- VC中使用CInternetSession抓取网页内容
- Horse around 闹着玩儿
- docnet 开发需要知道的网站!()