腾讯2016实习生笔试编程题,当时没做出来,只写了个雏形,还存在很多问题。考完了才把它调通。好难过。。
要求实现的效果如下。
#include <iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
int *arr = new int[n*n];
int num = 0;
int endX = 0, endY = 0;
if (0 == n % 2)
{
endX = n / 2 - 1;
endY = n / 2;
}
else
{
endX = n / 2;
endY = n / 2;
}
int x = 0, y = 0, per = 0;
int disX_R = 0, disX_L = 0, disY_U = 1, disY_D = 0;
while (x != endX || y != endY)
{
switch (per % 4)
{
case 0: //Right
if (x == n - disX_R - 1)
{
arr[y*n + x] = ++num;
++y;
++per;
++disX_R;
}
else
{
arr[y*n + x] = ++num;
++x;
}
break;
case 1: //Down
if (y == n - disY_D - 1)
{
arr[y*n + x] = ++num;
--x;
++per;
++disY_D;
}
else
{
arr[y*n + x] = ++num;
++y;
}
break;
case 2: //Left
if (x == disX_L)
{
arr[y*n + x] = ++num;
--y;
++per;
++disX_L;
}
else
{
arr[y*n + x] = ++num;
--x;
}
break;
case 3: //Up
if (y == disY_U)
{
arr[y*n + x] = ++num;
++x;
++per;
++disY_U;
}
else
{
arr[y*n + x] = ++num;
--y;
}
break;
default:
break;
}
}
if (x == endX && y == endY)
arr[y*n + x] = ++num;
for (int i = 0;i < n;++i)
{
for (int j = 0;j < n;++j)
cout << arr[i*n+j] << "\t";
cout << endl;
}
delete arr;
}