33,008
社区成员
发帖
与我相关
我的任务
分享
// 螺旋队列
#include <iostream>
using namespace std;
int abs(int x){
if(x>0)
return x;
else
return -x;
}
void inputNum(int &x,int &y){
cout<<"x=";
cin>>x;
cout<<"y=";
cin>>y;
}
void main(void){
int n,s; // n是所在圈数,s为上圈末尾值
int val; // 结果
int x(-3),y(2); // 坐标值
inputNum(x,y);
if (0==x && 0==y){
cout<<1<<endl;
exit(0);
}
// 下面六句才是关键,应该好懂吧,呵呵.......
n=abs(x)>abs(y)?abs(x):abs(y); //确定圈数
s=(n*2-1)*(n*2-1); //计算上圈最后一个值,为2n-1的平方
if (x==n && y!=-n) val=s+n+y; // 第1列,s+n后为中间值,加减x或y调整
else if (y==n && x!=n) val=s+n-x+n*2; // 第2列,第二列加上2n调整,2n就是第一列的几个数
else if (x==-n && y!=n) val=s+n-y+n*2*2;// 第3列,第三列加上2个2n
else if (y==-n && x!=-n) val=s+n+x+n*2*3;// 第4列,同样的,第四列加3个2n
cout<<val<<endl;
}