// SpinPrint.cpp : Defines the entry point for the console application.
//
//螺旋打印
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int** getCreateMatrix(int nVectors);
void SpinnerPrint(int** Matrix,int N,int nVectors);
int main(int argc, char* argv[])
{
int n = 15;
int nBound = (int)ceil(sqrt(n));
int **ptrMatrix = NULL;
ptrMatrix = getCreateMatrix(nBound);
SpinnerPrint(ptrMatrix,n,nBound);
for (int i=0;i<nBound;++i)
{
for (int j=0;j<nBound;++j)
{
if (ptrMatrix[i][j]==-1)
{
printf("\t");
continue;
}
printf("%d\t",ptrMatrix[i][j]);
}
printf("\n");
}
return 0;
}
int** getCreateMatrix(int nVectors)
{
int** ptrMatrix = NULL;
int i;
ptrMatrix = (int**)malloc(sizeof(int*)*nVectors);
for (i=0;i<nVectors;++i)
{
*(ptrMatrix+i) = (int*)malloc(sizeof(int)*nVectors);
}
return ptrMatrix;
}
void SpinnerPrint(int** Matrix,int N,int nVectors)
{
int i,j;
int nCount = 0;
int flag = 0;
for (i=0;i<nVectors;++i) //初始化数组
{
for (j=0;j<nVectors;++j)
{
Matrix[i][j] = -1;
}
}
i = 0;
j = 0;
while(nCount<N)
{
if (flag==0) //往右走
{
while(j!=nVectors&&Matrix[i][j]==-1)
Matrix[i][j++] = 1+nCount++;
--j;
++i;
flag = 1;
}
else if (flag==1) //往下走
{
while(i!=nVectors&&Matrix[i][j]==-1)
Matrix[i++][j] = 1+nCount++;
--i;
--j;
flag = 2;
}
else if (flag==2) //往左走
{
while(j!=-1&&Matrix[i][j]==-1)
Matrix[i][j--] = 1+nCount++;
--i;
++j;
flag = 3;
}
else if (flag == 3) //往上走
{
while(i!=-1&&Matrix[i][j]==-1)
Matrix[i--][j] = 1+nCount++;
++i;
++j;
flag = 0;
}
}
}
螺旋打印数组
最新推荐文章于 2021-11-21 11:46:34 发布