螺旋队列 算法与代码

【问题描述】:螺旋队列;实现输入坐标(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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值