打印Z形数

                                                        打印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;
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值