[ccf/csp题]201412-2 Z字形扫描

CCF CSP认证考试历年真题 Z字形扫描 C语言实现 试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述   在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:   对于下面的4×4的矩阵,   1 5 3 9   3 7 5 6   9 4 6 4   7 3 1 阅读详情

试题编号: 201412-2
试题名称: Z字形扫描
时间限制: 2.0s
内存限制: 256.0MB
问题描述:
问题描述
  在图像编码的算法中,需要将一个给定的方形矩阵进行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的正整数。


解析:

这道题,刚看到后有点懵,读完题还不太清楚题目里的Z字形到底是怎么个扫描法。刚开始还是没头绪的,但是自己在纸上画了3种情况,找到规律还是很容易解出来的。这道题思路有很多,比如你可以通过判断是否走到边界来判断是否要改变方向。但是我觉的这道题作为第2题,通过找规律解出来是最节省时间的。

我先来列举3种情况的走法:

n=3时:右1 -> 左下1 -> 下1 -> 右上2 -> 下1 -> 左下1 ->右1
n=4时:右1 -> 左下1 -> 下1 -> 右上2 -> 右1 -> 左下3 -> 右1 -> 右上2 -> 下1 -> 左下1 ->右1
n=5时:右1 -> 左下1 -> 下1 -> 右上2 -> 右1 -> 左下3 -> 下1 -> 右上4 -> 下1 -> 左下3 -> 右1 -> 右上2 ->下1 -> 左下1 -> 右1

规律就是:
总共移动的方向有4个,分别为向右,向左下,向下,向右上。
这4个方向可以分成2组,一组为向右和向下,每次都只移动1个步长。一组为左下和右上,
我们可以发现,运动方向刚开始是向右,然后是左下,下,右上。
斜方向的移动步长是先递增后递减。
拿n=5举例,斜方向的步长分别为: 1 2 3 4 3 2 1
方向的变换我们可以得出:右方向和下方向是交替的,但是有一个地方特殊,就是当移动完对角线时,方向是不变化的,我已经用粗体标出了。拿n=5举例吧,当第七步向下移动一个单位长度,再向右上方向移动4个单位长度后,按照之前的规律,紧接的一下步应该变成右1,但是没有发生改变。

左下和右上方向是一直交替进行的,并且每次都穿插在向右或向下移动之后。

所以我们可以分两步来遍历整个矩阵,沿右上方向的斜对角线分开,先遍历左半部分,再遍历右半部分。

代码如下:

#include<iostream>
using namespace std;


int main()
{
    ios::sync_with_stdio(false);

    int n;  //存储输入的n值
    cin>>n;
    int a[n][n];  //存储输入的矩阵

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin>>a[i][j];
        }
    }
    int m,k;   //m记录访问的需要访问元素的横坐标,k为纵坐标
    m=k=0;
    cout<<a[k][m]<<" ";   //访问第一个元素
    int flag1=-1;    //记录访问方向的标志位,-1为向右,1为向下
    int flag2=-2;    //访问方向的标志位,-2为左下,2为右上
    int s1=1;      //记录左下和右上访问方向的步长
    for(int i=0;i<n-1;i++)   //先遍历左上半边
    {
        if(flag1==-1)  //向下访问
        {
            m++;    //对应横坐标加1
        }
        else     //向右访问
        {
            k++;
        }
        if(i!=n-2)     //如果不是最后一次,则将下次访问方向改变
        flag1=-flag1;

        cout<<a[k][m]<<" "; 

        for(int j=0;j<s1;j++)   //斜方向访问
        {
            if(flag2==-2)   //左下
            {
                m--;
                k++;
            }
            else     //右上
            {
                m++;
                k--;
            }
            cout<<a[k][m]<<" ";
        }
        if(i!=n-2)   //若不是最后一次,则下次步长加1,否则减1
        s1++;
        else
        s1--;

        flag2=-flag2;    //下次反问的斜方向发生改变
    }
    for(int i=0;i<n-1;i++)   //遍历右下半部分
    {
        if(flag1==-1)    
        {
            m++;
        }
        else
        {
            k++;
        }
        cout<<a[k][m]<<" ";

        flag1=-flag1;
        for(int j=0;j<s1;j++)
        {
            if(flag2==-2)
            {
                m--;
                k++;
            }
            else
            {
                m++;
                k--;
            }
            cout<<a[k][m]<<" ";

        }
        s1--; 
        flag2=-flag2;

    }
    return 0;
}
历年CCF-CSP认证考试题目解法/思想 每年的题难度都不太一样,这一点在16、17年上尤其明显,难度低的时候前两道题就是送分题,加一起15分钟解决,得分样例水的不行。难度高的时候第二题就让你模拟半天,且测试样例诡异无比,测试样例通过可能只=20分,就别说后面3,4题了。 总结一些技术点、难点: 字符串处理上:lcs(最长公共子序列),kmp(字符串匹配算法),复杂题设计思维+注释,类的设置,数据封装,多重嵌套解法 阅读详情

相关推荐

CCF-CSP 201412-2 Z字形扫描

问题描述   在图像编码的算法中,需要将一个给定的方形矩阵进行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字形...

努力努力再努力 347

【CCF-CSP】201412-2 Z字形扫描 C++

201412-2 Z字形扫描

qq_45727086的博客 691

CCF-CSP历次考试 第二题答案合集(倒序)

本文包含CCF-CSP模拟考试系统中历年考试全部第二题的答案,目前更新至202006-2。 202006-2 稀疏向量 【题目描述】 对于一个n维整数向量v∈Zn,其在第index个维度上的取值记作vindex。这里我们约定index的取值从1开始,即v=(v1,v2,…vn)。下面介绍一种向量的稀疏表示方法。 如果v仅在少量维度上的取值不为0,则称其为稀疏向量。 例如当n=10时,v=(0,0,0,5,0,0,-3,0,0,1)就是一个稀疏向量。 由于稀疏向量的非零值较少,我们可以通过仅存储非零值的方式

Timothy_Liuu的博客 3592

CSP CCF 201412-2 Z字形扫描 C++满分题解

【代码】CSP CCF 201412-2 Z字形扫描 C++满分题解。

小瑾的博客 1088

CSP 201412-2 Z字形扫描

CSP 201412-2 Z字形扫描满分方法,简单快捷方便有效容易理解。分成两部分,处理,上三角和下三角,注意每个拐弯的地方。

Delta机器人:运动学正反解分析

Delta机器人:运动学正反解分析 一、Delta机构简介 Delta机构是并联机构中的一种典型机构,起原始结构如图1所示。Delta机构由R.Clavel 博士在 1985年发明,是现在并联机器人中使用最多的一种,具备了并联机构所特有的优点,负载能力强、效率高、末端执行器精度高、运动惯性小,可以高速稳定运动等。因此在机器人领域获得了越来越广泛的应用。以实现高速、精准、高效的运动。           &n

花洛兮灬 3万+

CSP认证--备考+入门

CSP认证入门,备考指南

m0_74181321的博客 1万+

rk3576 适配以太网(百兆)

百兆以太网,也常被称为快速以太网,是一种在1990年代中期推出的计算机网络技术标准。它相当于把当时主流的10兆以太网速度提升了10倍,最高能提供 100 Mbps 的传输速率,让文件共享、视频传输等网络应用变得流畅许多。它在数据链路层面完全保留了传统以太网的帧格式和MAC机制,这意味着现有的网络软件可以无缝对接,用户从10兆网络升级到百兆网络时,通常只需要更换网卡和集线器/交换机即可,非常方便。 在rk3576平台上,原生以太网接口支持百兆、千兆,还有pcie转换的2.5G。

weixin_35723192的博客 203

csp介绍

CCF-CSP认证分为初级认证和高级认证两个级别,初级认证主要考察考生的基础理论知识和技能,高级认证则更加注重考生在实际项目中的实践能力和管理能力。通过CCF-CSP认证可以证明自己在计算机系统安全领域的专业水平和能力,同时对于企业来说,也是考察和选拔计算机系统安全人才的重要依据之一。CCF-CSP是中国计算机学会(CCF)颁发的计算机系统安全专业资格认证,全称为“中国计算机学会-计算机系统安全专业人员(CCF-CSP)”。

q64644545的博客 955

verilog实现步进电机脉冲分配器(三相六拍)基于Nexys4DDR开发板

使用Verilog HDL设计的一个能够自启动、具有正反转功能的三相六拍步进电机脉冲分配器。已经写好Nexy4DDR的管脚约束文件 可以通过Nexys4DDR开发板的PMOD接口连接步进电机进行调试。 使用verilog语言 在vivado2018.2下运行编译下载都正确,(也可在ISE,QuartusII下使用)下面是工程截图: ...

QQ_778132974的博客 2590

算法 | 基于灰狼优化算法的无人机三维路径规划方法研究(附matlab代码)

针对复杂环境下的无人机三维路径规划问题,本文提出一种基于灰狼优化算法(Grey Wolf Optimizer, GWO)的解决方案。通过模拟灰狼群体的社会等级与协作捕猎机制,结合动态参数调整策略,优化路径长度与避障性能。实验表明,相较于粒子群优化(PSO)和遗传算法(GA),GWO算法在收敛速度与路径成本上分别提升约25%和18%,且在三维城市地形中表现出更强的避障鲁棒性。本文提供完整的MATLAB代码实现,为无人机自主导航提供理论与技术支撑。

尘世冰封的专栏 287

CSP简单介绍

由于这个东东我刚刚学习,没什么例子参考,也没办法动手实践接下来值提供一些可以看看的文章,供以后用到的时候继续学习 CSP简介 什么是CSP? CSP(Content Security Policy)指的是内容安全策略 ,是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本攻击 (XSS) 和数据注入等攻击 这些攻击可用于实现从数据窃取到网站破坏或作为恶意软件分发版本等...

秋水的博客 5299

DC/DC开关电源学习笔记(十五)四开关Buck-Boost-FSBB升降压电路拓扑与工作原理

在DCDC领域,最为常见的是buck拓扑,其次是boost拓扑,而buck-boost的关注度相对较低。但是在电池供电场景日益普及的现在,升降压的需求在不断上升,现在更加关注buck-boost这个拓扑。而在所有buck-boost拓扑中,四开关buck-boost最受欢迎。四开关buck-boost的拓扑很简单,如下图。

小幽余生不加糖 5997

CCF-CSP真题 《201412_2_Z字形扫描》Python思路题解

CCF-CSP真题 《201412_2_Z字形扫描》Python思路题解

2401_89427870的博客 1507

从菜鸟到大神:VSCode助力HTML开发全攻略

本文全面介绍 VSCode 在 HTML 开发中的高效应用。先引导读者完成 VSCode 的安装与个性化设置,助其快速适应开发环境;接着推荐 Live Server、Prettier 等实用插件,实现实时预览、代码格式化等功能,提升开发效率。通过详细的开发实战步骤,从新建文件到添加样式,带领读者掌握 HTML 基础结构与常用标签使用。还分享代码片段管理、多人协作等进阶技巧,解决常见开发问题。旨在帮助开发者利用 VSCode,轻松高效完成 HTML 开发,打造优质网页。

邓邓子的博客 3364

Spine骨骼动画查看器 - Skeleton Viewer

骨骼动画是现代游戏和动画制作中常用的技术之一。Spine骨骼动画查看器(Skeleton Viewer)是一个官方提供的工具,用于查看和调试Spine骨骼动画。本文将介绍Skeleton Viewer的功能和使用方法,并提供相应的源代码示例。通过Skeleton Viewer,开发者可以直观地查看和调试Spine骨骼动画,包括骨骼结构、动画播放和事件触发等。这有助于提高骨骼动画的质量和效果,并加速开发过程。以上代码演示了如何使用Skeleton Viewer查看和播放Spine骨骼动画。

HsvvDatabase的博客 3458

CCF CSP 201412-2 Z字形扫描(C++语言100分)[简单算法]

#include <iostream> using namespace std; int main() { int n,start; cin>>n; int matrix[n][n]; for (int i=0; i<n ; i++ ) { for (int j=0; j<n ; j++ ) { cin>>matrix[i][j]; }

AlbertDarren的博客 1476

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【CCF-CSP201412-2】Z字形扫描

文章目录1. 题目要求2. 思考与解答3. 总结 1. 题目要求 2. 思考与解答 这道题目我想了比较久,找规律花的时间不多,但是如何模拟这个规律,调整输出的顺序,花了较多时间。思路如下: 每次扫描,一定是从左上角开始,到右下角为止。 数字个数非常有限,可以用二维数组模拟这一个图片矩阵; 有多个方向不同的扫描轨迹,如果把每个扫描轨迹划分为不同的组(互相平行的轨迹算做不同的扫描组),组号从 0 开始,那么就会有下面的扫描序列(给出依次扫描的每个元素的坐标序列从 0 开始,数组下标从 0 开始,以4x4

infbeat的博客 392

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ccf/csp认证 201412-2 Z字形扫描 C语言 100分解答

试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述   在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:   对于下面的4×4的矩阵,   1 5 3 9  ...

qq_40996164的博客 915

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

CCF-CSP认证历年真题解(100分)

转载: 链接出自:https://blog.youkuaiyun.com/tigerisland45/article/details/54755895 CCF-CSP认证历年真题解–python语言 CCF-CSP认证历年真题解–Java语言 C/C++语言: 2019.12 第18次: CCF201912-1 报数(100分)【模拟】 CCF201912-2 回收站选址(100分)【序列处理】 2019.09 第17次: CCF201909-1 小明种苹果(100分)【序列处理】 CCF201909-2 小明种苹果(

追梦鸟 3万+

CSP201412-2Z字形扫描

问题描述 试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述   在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:   对于下面的4×4的矩阵,   1 5 3 ...

Nash_SP的博客 338

CCF计算机软件能力认证考试-201412-2-Z字形扫描

题目: 试题编号:201412-2试题名称:Z字形扫描时间限制:2.0s内存限制:256.0MB问题描述: 问题描述   在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:   对于下面的4×4的矩阵,   1 5 3 9   3 7 5 6   9 4 6 4   7 3 1 3   对其

X@IAS 1927

CCF CSP 编程题目和解答-----试题名称:Z字形扫描-------201412-2

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

木子的博客 886
上一篇: [ccf/csp题]201709-2公共钥匙盒
下一篇: C++适配器的使用总结
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值