腾讯2016实习生笔试编程题 打印蛇形矩阵

来源:互联网 发布:淘宝网店服务平台 编辑:程序博客网 时间:2024/05/16 15:07

腾讯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;  }  


0 0
原创粉丝点击