螺旋队列的问题

扬州三少 2009-11-08 10:19:26
螺旋队列面试题

21 22 23 24 ...
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),输出所对应的数字。

我看到网上解法这样写的

给定一个坐标值(x,y)
取得|x|,|y|中的最大值为c,得出所在正方形边的长度为2c+1,正方形右上角顶点值为2c+1的平方(p),它的坐标为(m,n)(负坐标),次级正方形的右上角顶点值为2c-1的平方(q),它的坐标为(j,k)(负坐标),y-n值的绝对值为d,x-m值的绝对值为b,判断d和b的值,

1. d= =0 && b= =0,对应的值为p

2. d <=6 && b = =对应的值为q+d+b;

3. d= =6 && b <=6,对应的值为q+d+b;

4. d <6 && b= =6,对应的值为p-d-b;

5. d= =0 && b <6对应的值为p-d-b;


但是具体没有给出,所以请知道的深入剖析一下,尤其是第一段文字的意思, 真的不太明白。
如:“取得|x|,|y|中的最大值为c,得出所在正方形边的长度为2c+1,”正方形在哪呢?
...全文
805 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
SHEN198912 2011-11-02
  • 打赏
  • 举报
回复
http://blog.csdn.net/yhmhappy2006/article/details/2934435 这个上面分析比较详细,带图
JungleWei 2011-09-17
  • 打赏
  • 举报
回复
/*
每次都先找出坐标(x,y)所在的以1为对称中心的环形的最左下方的坐标(xt,yt)
显然xt是x和y的绝对值的最大值的相反数,yt是xt的相反数

然后可以得到(xt,yt)处的值为|2*yt|^2+1 写成代码为luNum=(long)pow(2*yt,2)+1; 我们加上long强制转换

然后就可以求出(x,y)处的值了,分为右下三角(包含左下顶点) 和 左上三角(包含右上顶点)
这段代码可以判断是右下三角:

if((x>xt&&y==yt)||(y>-yt&&x==-xt)){ //右下三角

*/
#include <stdio.h>
#include <math.h>

int main(){
int x,y,absx,absy;
long luNum,res;
int xt,yt;
while (scanf("%d%d",&x,&y)!=EOF){
xt=0;
absx=abs(x);absy=abs(y);
xt-=(absx>absy)?absx:absy;
yt=-xt;
luNum=(long)pow(2*yt,2)+1;

if((x>xt&&y==yt)||(y>-yt&&x==-xt)){ res=luNum-(yt-y)-(x-xt);
}else{
res=luNum+(yt-y)+(x-xt);
}

printf("%d\n",res);
}

return 0;
}
cheng_fengming 2009-11-09
  • 打赏
  • 举报
回复
#include<stdio.h>
#define max(a,b) ((a)<(b)?(b):(a))
#define abs(a) ((a)>0?(a):(-a))

int foo(int x, int y)
{
int t = max(abs(x),abs(y));
int u = t+t;
int v = u-1;
v = v*v+u;
if (x==t)
v+= u+t-y;
else if (y == -t)
v+= 3*u+x-t;
else if (y == t)
v+= t-x;
else
v+= y-t;
return v;
}

int main()
{
int x,y;
for(y = -4; y <= 4; y++)
{
for(x = -4; x < = 4; x++)
{
printf("%5d",foo(x,y));
}
printf("\n");
}
while(scanf("%d%d",&x,&y) == 2)
printf("%d\n",foo(x,y));

return 0;
}

33,319

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧