您的位置:首页 > 编程语言

螺旋队列 算法与代码

2010-04-29 21:46 260 查看
【问题描述】:螺旋队列;实现输入坐标(x , y)输出数值。

【算法分析】:

队列数值范围:

第1圈2~9

第2圈10~25

第3圈26~49

第t圈(2t-1)^2+1 ~ (2t+1)^2

东边:

最小值为(2t-1)^2+1,最小值所在的坐标为(t,1-t)。

除第一个值(最大值)外,

该列数值值为: [(2t-1)^2+1] + [y-(1-t)] = (2t-1)^2+t+y

南边:

每边数值个数为2t+1,

该边最小值为:[(2t-1)^2+1]+(2t+1-2)

该边数值值为:[(2t-1)^2+1]+(2t+1-2)+t-x = (2t-1)^2+3t-x

西边:

该列最小值为:[(2t-1)^2+1]+(2t+1-2)+(2t+1-1)

该列数值值为:[(2t-1)^2+1]+(2t+1-2)+(2t+1-1)+t-y = (2t-1)^2+5t-y

北边:

该边最小值为:[(2t-1)^2+1]+(2t+1-2)+(2t+1-1)*2

该边数值值为:[(2t-1)^2+1]+(2t+1-2)+(2t+1-1)*2+t+x = (2t-1)^2+7t+x

【代码】:

#include <stdio.h>

#define max(a,b) ((a)>(b)?(a):(b))

#define abs(a) ((a)>0?(a):-(a))

int foo(int x,int y)

{

int t;

int v;

t= max(x,y);

if(x==t && y!= -t) //东

v = sqrt(2t-1)+t+y

if(y==t) //南

v = sqrt(2t-1)+3t-x

if(x==-t) //西

v = sqrt(2t-1)+5t-y

if(y==-t) //北

v = sqrt(2t-1)+7t+x

return v;

}

int main

{

int x,y;

int v;

scanf("%d,%d",&x,&y);

v = foo(x,y);

printf("%d (%d, %d)",v,x,y);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: