打印Z形数
额~已经结束了,找不到题目,就只能按照我的记忆来了。
题目描述:
输入数据N代表数组的行列数,之后N行依次输入数字。把数字按照Z形的顺序打印出来。
嗯就是这样,打印出来就是1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
每两个数字之间有空格。
样例输入:
4
3 4 6 7
9 8 3 4
2 5 7 8
2 4 6 3
样例输出:
3 4 9 2 8 6 7 3 5 2 4 7 4 8 6 3
至于数字范围要求我也不记得了,不是很大的样子。
首先想到的就是和蛇形填数差不多,然后试着写一下觉得好麻烦,然后就换一种想法去打印出来。
就只要循环第一行和最后一列,判断i+j的奇偶性,根据奇偶性来进行斜上输出或者是斜下输出就OK了~
然后很重要的需要注意的地方就是输出的循环判断上,另外强调,要增加耐心才行啊~
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAX 100
using namespace std;
int num[MAX][MAX];
int main()
{
int n;
int x=0, y=0, xx=0, yy=0;
scanf("%d", &n);
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
scanf("%d", &num[i][j]);
}
}
printf("%d ", num[0][0]);
for(int i=1, j=0; i<n; i++)
{
if((i+j)%2!=0) //奇数,斜下
{
x = xx = j;
y = yy = i;
while(yy>=x && xx<=y)
{
printf("%d ", num[xx][yy]);
yy--;
xx++;
}
}
else
{
x = xx = i;
y = yy = j;
while(xx>=y && yy<=x)
{
printf("%d ", num[xx][yy]);
xx--;
yy++;
}
}
}
for(int i=1, j=n-1; i<n-1; i++)
{
if((i+j)%2!=0) //奇数,斜下
{
x = xx = i;
y = yy = j;
while(yy>=x && xx<=y)
{
printf("%d ", num[xx][yy]);
xx++;
yy--;
}
}
else
{
x = xx = j;
y = yy = i;
while(yy<=x && xx>=y)
{
printf("%d ", num[xx][yy]);
yy++;
xx--;
}
}
}
printf("%d", num[n-1][n-1]);
return 0;
}