螺旋数列






#include <stdio.h>
#define max(a,b) (a>b?a:b)
#define abs(a) (a>0?a:-a)
//螺旋队列
int foo(int x,int y)
{
//t的值代表前面有t圈螺旋
//1坐标(0,0)为第一圈,2、3、4、5、6、7、8、9为第二圈,......
int t=max(abs(x),abs(y));
if(t==0)
return 1;
//前t圈螺旋共有m个数字
int m=1+4*t*(t-1);
int n=0; //n表示所要求的数


//判断所给的点在哪条边上
//如果t==abs(x),说明在左右边上:t==x,在右边上;t==-x,在左边上
//如果t==abs(y),说明在上下边上,t==y,在下边上;t==-y,在上边上
//根据所给的坐标(x,y),可知每条边上共2*t+1个点,
if(t==x && t!=-y ) //点在右边上(除去上端点)
{
n=m+t+y;
}
else if(t==-x) //点在左边上
{
n=m+5*t-y;
}
    else if(t==-y)//在上边上
{
n=m+7*t+x;
}
else //在下边上
{
n=m+3*t-x;
}
return n;


}
void main( void )
{
   
     
int n=foo(-2,-1);
//输出坐标对应的数字
printf("%d\n",n);
      
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值