21
20
19
18
17
解题思路:先判断给定的点位于的层,然后找出该层起始数字的前一个数字start,就是上一层的最后一个数字,他位于對交线上,然后推断递加即可。
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
cout << "Input a and b ,please: ";
int x,y;
cin >> x >> y;
int layer = abs(x)>abs(y)?abs(x):abs(y);
if(layer == 0)
{
cout << "1" << endl;
return -1;
}
int start;
start = (2*layer - 1)*(2*layer - 1);
cout <<"start = " << start << endl;
if(x == layer && y >(layer *(-1)))
{
cout << start + (y + layer);
}
else if(y == layer && x < layer)
{
cout << start+2*layer+(layer-x);
}
else if(x == (-1 * layer) && y < layer)
{
cout << start+layer*4+layer-y;
}
else {
cout << start+6*layer+layer+x;
}
}