CSP201412-2:Z字形扫描
引言: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字形扫描的更多相关文章
- Z字形扫描(201412-2)
问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...
- CCF——Z字形扫描问题
试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag ...
- [CCF] Z字形扫描
CCF Z字形扫描 感觉和LeetCode中的ZigZag还是有一些不一样的. 题目描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z ...
- CCF真题之Z字形扫描
201412-2 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 ...
- CCF系列之Z字形扫描(201412-2)
试题编号:201412-2试题名称:Z字形扫描时间限制: 2.0s内存限制: 256.0MB 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n ...
- CCF CSP 201412-2 Z字形扫描
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201412-2 Z字形扫描 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫 ...
- Z字形扫描矩阵
问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...
- 201412-2 Z字形扫描(c语言)
问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...
- CCF201412-2 Z字形扫描 java(100分)
试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag ...
随机推荐
- 统计 SQL Server中的 Job 情况
SELECT J.name 作业名称, P.step_id'步骤编号',P.step_name'步骤名称',p.SubSystem '步骤类型',P.command'执行命令', CASE freq_ ...
- 第三天-零基础学习python
1.回忆.列表方法,append(),extend(),insert() 2.列表获取元素: >>> member = ['HU','YU','HUYAN','HUJIAMU'] ...
- 【oracle】关于创建表时用default指定默认值的坑
刚开始学create table的时候没注意,学到后面发现可以指定默认值.于是写了如下语句: 当我查询的时候发现,查出来的结果是这样的.. 很纳闷有没有,我明明指定默认值了呀,为什么创建出来的表还是空 ...
- dubbox provider cosumer 包坐标及xml
provider pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...
- 2018 CVTE 前端校招笔试题整理
昨天晚上(7.20)做了CVTE的前端笔试,总共三十道题,28道多选题,2道编程题 .做完了之后觉得自己基础还是不够扎实,故在此整理出答案,让自己能从中得到收获,同时给日后的同学一些参考. 首先说一下 ...
- Zabbix——解决中文显示乱码
前提条件: 准备好上传工具,我用的是WinSCP 使用字体是微软雅黑,如果使用其他的更改名称即可. 更改Zabbix服务器的默认参数: vi /usr/share/zabbix/include/def ...
- IDEA中使用单元测试@Test等,提示没有 Junit.jar包
1.File-->Project Structure-->Modules-->右侧Dependencies-->+号-->JARs or directories... 2 ...
- Flask中那些特殊的装饰器
模板相关的装饰器 @app.template_global() 用法: @app.template_global() # 记得加括号 def jiafa(a, b): # 这个方法每调用一次就需要传一 ...
- yii学习笔记(3),自定义全局工具函数
在平时开发是经常需要打印数据来调试 常见的打印方式有print_r和var_dump,但是这样打印出来格式很乱不好浏览 在打印函数前后加上<pre></pre>就可以将内容原样 ...
- Appointment Helper
using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; using Microsoft.Xrm.Sdk.Que ...