题目来自小米校招笔试题
题目:打印蛇形矩阵
思路:一次打印一个斜杠
代码:
#include <iostream>
using namespace std;
void PrintUp(int **pArrMatrix,int nCurX,int nCurY,int nLen,int& nCount);
void PrintDown(int **pArrMatrix,int nCurX,int nCurY,int nLen,int& nCount);
void PrintDown(int **pArrMatrix,int nCurX,int nCurY,int nLen,int& nCount)
{
//出口
if (nCurX >= nLen || nCurX < 0 || nCurY >= nLen || nCurY < 0)
{
return;
}
//赋值
for (;nCurX < nLen && nCurY >= 0;nCurX++,nCurY--)
{
pArrMatrix[nCurX][nCurY] = nCount++;
}
if (nCurX <= nLen - 1)// 处理上三角
{
PrintUp(pArrMatrix,nCurX,nCurY + 1,nLen,nCount);
}
else
{
PrintUp(pArrMatrix,nCurX - 1,nCurY + 2,nLen,nCount);
}
}
void PrintUp(int **pArrMatrix,int nCurX,int nCurY,int nLen,int& nCount)
{
//出口
if (nCurX >= nLen || nCurX < 0 || nCurY >= nLen || nCurY < 0)
{
return;
}
//赋值
for (;nCurX >= 0 && nCurY < nLen;nCurX--,nCurY++)
{
pArrMatrix[nCurX][nCurY] = nCount++;
}
if (nCurY <= nLen - 1)//上三角
{
PrintDown(pArrMatrix,nCurX + 1,nCurY,nLen,nCount);
}
else
{
PrintDown(pArrMatrix,nCurX + 2,nCurY - 1,nLen,nCount);
}
}
void Print(int nLen)//主函数
{
int nCount = 1;
int **pArrMatrix = new int *[nLen];
for (int i = 0;i < nLen;i++)
{
pArrMatrix[i] = new int[nLen];
memset(pArrMatrix[i],0,sizeof(int) * nLen);
}
PrintDown(pArrMatrix,0,0,nLen,nCount);
//输出
for (int i = 0;i < nLen;i++)
{
for (int j = 0;j < nLen;j++)
{
cout<<pArrMatrix[i][j]<<" ";
}
cout<<endl;
}
}