打印Z形数

来源:互联网 发布:sql查询分析器在哪 编辑:程序博客网 时间:2024/05/21 06:53

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



0 0
原创粉丝点击