引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人员,以及高校招考研究生的复试对象。

  • 问题描述

  在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:

  对于下面的4×4的矩阵,

  1 5 3 9

  3 7 5 6

  9 4 6 4

  7 3 1 3

  对其进行Z字形扫描后得到长度为16的序列:

  1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3

  请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。

  • 输入格式

  输入的第一行包含一个整数n,表示矩阵的大小。

  输入的第二行到第n+1行每行包含n个正整数,由空格分隔,表示给定的矩阵。

  • 输出格式

  输出一行,包含n×n个整数,由空格分隔,表示输入的矩阵经过Z字形扫描后的结果。

  • 样例输入

    4

    1 5 3 9

    3 7 5 6

    9 4 6 4

    7 3 1 3

  • 样例输出

    1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3

  • 评测用例规模与约定

    1≤n≤500,矩阵元素为不超过1000的正整数。

  • 源代码

# include <stdio.h>

# include <stdlib.h>

# include <memory.h>

int main(void)

{

int n; //矩阵规模

scanf("%d", &n);

//创建矩阵(二维数组)并分配空间

int **pInput = (int **)malloc(sizeof(int *) * n);

for (int i = 0; i < n; i++)

{

pInput[i] = (int *)malloc(sizeof(int) * n);

memset(pInput[i], 0, sizeof(int) * n);

}

//创建输出数组

int *pOutput = (int *)malloc(sizeof(int) * n * n);

memset(pOutput, 0, sizeof(int) * n * n);

//矩阵输入

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

scanf("%d", &pInput[i][j]);

}

}

int j = 0;

int k = 0;

int state = 1;

pOutput[0] = pInput[0][0];

for (int i = 1; i < n*n; i++)

{

switch (state)

{

case 1:{ //向右

k += 1;

pOutput[i] = pInput[j][k];

if (j == 0)

{

state = 2;

}

else

{

state = 4;

}

break;

}

case 2:{ //向左下

j += 1;

k -= 1;

pOutput[i] = pInput[j][k];

if (k == 0 || j == n - 1)

{

if (j == n - 1)

{

state = 1;

}

else

{

state = 3;

}

}

else

{

state = 2;

}

break;

}

case 3:{ //向下

j += 1;

pOutput[i] = pInput[j][k];

if (k == 0)

{

state = 4;

}

else

{

state = 2;

}

break;

}

case 4:{ //向右上

j -= 1;

k += 1;

pOutput[i] = pInput[j][k];

if (j == 0 || k == n - 1)

{

if (k == n - 1)

{

state = 3;

}

else

{

state = 1;

}

}

else

{

state = 4;

}

break;

}

default:{

break;

}

}

}

for (int i = 0; i < n * n - 1; i++)

{

printf("%d ", pOutput[i]);

}

printf("%d\n", pOutput[n * n - 1]);

//释放矩阵(二位数组)空间

for (int i = 0; i < n; i++)

{

free(pInput[i]);

}

free(pInput);

//释放输出数组空间

free(pOutput);

return 0;

}

CSP201412-2:Z字形扫描的更多相关文章

  1. Z字形扫描(201412-2)

    问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...

  2. CCF——Z字形扫描问题

    试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag ...

  3. [CCF] Z字形扫描

    CCF Z字形扫描 感觉和LeetCode中的ZigZag还是有一些不一样的. 题目描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z ...

  4. CCF真题之Z字形扫描

    201412-2 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 ...

  5. CCF系列之Z字形扫描(201412-2)

    试题编号:201412-2试题名称:Z字形扫描时间限制: 2.0s内存限制: 256.0MB 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n ...

  6. CCF CSP 201412-2 Z字形扫描

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201412-2 Z字形扫描 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫 ...

  7. Z字形扫描矩阵

    问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...

  8. 201412-2 Z字形扫描(c语言)

    问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...

  9. CCF201412-2 Z字形扫描 java(100分)

    试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag ...

随机推荐

  1. UI到底应该用xib/storyboard完成,还是用手写代码来完成?

    UI到底应该用xib/storyboard完成,还是用手写代码来完成? 文章来源:http://blog.csdn.net/libaineu2004/article/details/45488665 ...

  2. 课时25.a标签基本使用(掌握)

    什么是a标签? 我们打开百度或者淘宝网页,观察任何一个超链接都会发现它有如下特质: 有下划线 移上去有小手指 可以点击 a标签的作用:就是用于控制页面与页面之间跳转的 a标签的格式:<a hre ...

  3. java中强引用、软引用、弱引用、幻象引用有什么区别?分别使用在什么场景?

    不同的引用类型,主要体现在对象的不同可达性(reachable)状态和对垃圾收集的影响. 1.强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就表明对象还"活着",垃 ...

  4. 二、Shiro 认证开发

    I.java开发 环境准备 <dependencies> <dependency> <groupId>junit</groupId> <artif ...

  5. JAVA给你讲它的故事

    计算机语言如果你将它当做一个产品,就像我们平时用的电视机.剃须刀.电脑.手机等, 他的发展也是有规律的. 任何一个产品的发展规律都是:向着人更加容易使用.功能越来越强大的方向发展. 那么,我们的计算机 ...

  6. Bash游戏(51Nod - 1046)

    20180603 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出N和K,问最后谁能赢得比赛 ...

  7. Linux 只显示目录或者文件方法

    ls 参数 -a 表示显示所有文件,包含隐藏文件-d 表示显示目录自身的属性,而不是目录中的内容-F 选项会在显示目录条目时,在目录后加一个/ 只显示目录 方法一: find . -type d -m ...

  8. Django忘记超级用户密码||账号

    第一步:运行django shell python3 manage.py shell 第二步:重设密码 >>> from django.contrib.auth.models imp ...

  9. DataSet和泛型之间相互转换

    取数据的时候,存储过程返回了多个结果集,后台用DataSet去接收这几个结果集,然后接收之后,需要将结果集转换为不同的实体,于是下面的代码便出现了. /// <summary> /// 将 ...

  10. js数组去重(多种写法)

    最基本的写法 使用indexOf() var arr = [1,1,5,77,32,54,2,4,5,2,2,4,52,2,2,2,2,2] //比较常规的语法使用indexOf来判断是否已经存在 g ...