题目描述
样例
源代码
#include<iostream>
#include<cstring>
using namespace std;
const int N = 500;
int flag[N + 1][N + 1];
int n;
int main()
{
cin >> n;
int a=1, b=1;
int i, j;
for (i = 1; i < n + 1; i++)
{
for (j = 1; j < n + 1; j++)
{
cin>>flag[i][j];
}
}
printf("%d ", flag[a][b]);
while (a <= n && b <= n)
{
if (b < n)
{
b++;
if (flag[a][b])
{
printf("%d ", flag[a][b]);
}
}
else if (b == n)
{
a++;
if (flag[a][b])
{
printf("%d ", flag[a][b]);
}
}
while (b > 1&& a<n)
{
b--;
a++;
if (flag[a][b])
{
printf("%d ", flag[a][b]);
}
}
if (a < n)
{
a++;
if (flag[a][b])
{
printf("%d ", flag[a][b]);
}
}
else if (a == n)
{
b++;
if (flag[a][b])
{
printf("%d ", flag[a][b]);
}
}
while (a > 1 && b<n)
{
a--;
b++;
if (flag[a][b])
{
printf("%d ", flag[a][b]);
}
}
}
return 0;
}
关于这题
这里 我采用了笨办法
题目其实 除了第一个数以外 剩下的是一个循环模式
①如果能往右 往右 到头了 则往下
②斜向下
③能往下 则往下 到头了 则往右
④斜向上
我们把数组初始化为0 如果超过了 给定的范围则不打印