#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
const int arrowRight = 0;
const int arrowLeftDown = 1;
const int arrowDown = 2;
const int arrowRightUp = 3;
int currentDir = 0; // 当前的方向是向右的
int a[501][501];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
}
}
int m = 0; // m表示横坐标
int k = 0;
int p = n - 1;
printf("%d ",a[0][0]);
while (true)
{
if (m==p&&k==p)
break;
if (currentDir == 0)
{
if (m == 0)
currentDir = arrowLeftDown;
else
currentDir = arrowRightUp;
k = k + 1;
}
else if (currentDir == arrowLeftDown) // 左下三种情况:如果到了第0列,向下,如果到了第p行向右 其余的不变
{
if (k == 1 && m != (p - 1))
{
currentDir = arrowDown;
m = m + 1;
k = 0;
}
else if (m == (p - 1))
{
currentDir = arrowRight;
m = p;
k = k - 1;
}
else{
m = m + 1;
k = k - 1;
}
}
else if (currentDir == arrowDown) //向下有两种情况 如果是p列,向左下 如果是0列 想右上
{
if (k == 0)
{
currentDir = arrowRightUp;
m = m + 1;
}
else if (k == p)
{
currentDir = arrowLeftDown;
m = m + 1;
}
}
else if (currentDir == arrowRightUp) // 三种情况:如果
{
if (k == (p - 1))
{
m = m - 1;
k = p;
currentDir = arrowDown;
}
else if(m == 1)
{
m = m - 1;
k = k + 1;
currentDir = arrowRight;
}
else
{
m = m - 1;
k = k + 1;
}
}
printf("%d ", a[m][k]);
}
system("pause");
return 0;
}
Z型输出数组 ------ccf认证第二题
最新推荐文章于 2024-11-05 20:43:14 发布