#include <stdio.h>
class CManageArr{
public:
//static const int Haba = 5;
static const int Haba = 1001;
static const int UB = Haba-1;
private:
int Ban[Haba][Haba];
public:
void SetVal(int pX,int pY,int pVal ){Ban[pX][pY] = pVal;}
int GetVal(int pX,int pY){return Ban[pX][pY];}
}ManageArr;
void main()
{
int X, Y;
X = Y = ManageArr.UB / 2;
int MoveX, MoveY;
MoveX = MoveY = 1;
int NextMove = 2;
int WillSetVal = 1;
ManageArr.SetVal(X,Y,WillSetVal);
while (true) {
if (MoveX > 0) {
if (++X > ManageArr.UB) break;
--MoveX;
ManageArr.SetVal(X,Y,++WillSetVal);
continue;
}
else if (MoveX < 0) {
if (--X < 0) break;
++MoveX;
ManageArr.SetVal(X,Y,++WillSetVal);
continue;
}
else if (MoveY > 0) {
if (++Y > ManageArr.UB) break;
--MoveY;
ManageArr.SetVal(X,Y,++WillSetVal);
continue;
}
else if (MoveY < 0) {
if (--Y < 0) break;
++MoveY;
ManageArr.SetVal(X,Y,++WillSetVal);
continue;
}
if (NextMove % 2 == 0) {
MoveX = MoveY = -NextMove++;
}
else {
MoveX = MoveY = NextMove++;
}
}
if (CManageArr::Haba == 5){
for (int I = 0; I <= ManageArr.UB; I++) {
for (int J = 0; J <= ManageArr.UB; J++) {
printf("%8d,",ManageArr.GetVal(J,I));
}
printf("\n");
}
}
__int64 SumVal = 0;
for (int I = 0; I <= ManageArr.UB; I++) {
SumVal += ManageArr.GetVal(I, I);
if (I != ManageArr.UB / 2)
SumVal += ManageArr.GetVal(ManageArr.UB - I, I);
}
printf("合計=%I64d\n",SumVal);
}