zoukankan      html  css  js  c++  java
  • CCF真题之Z字形扫描

    201412-2

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

    using namespace std;

    int main() {  

    int n,i,j,k,a[501][501];  

    cin>>n;  

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

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

      cin>>a[i][j];  

    for(k=0;k<n;k++)  {    

       if(k%2==0)   {    

       j=0;    

       i=k;    

     while(i>=0)    {     

       if(k==0)       

       cout<<a[i][j];     

       else      

       cout<<" "<<a[i][j];       

       i--;       

       j++;         

                       }   

                       }  

     else   {        

    j=k;    

    i=0;    

    while(j>=0)    {     

    cout<<" "<<a[i][j];    

     i++;    

     j--;    

    }   

    }    

    }  

    for(k=n;k<2*n-1;k++)  {   

    if(k%2==0)   {       

     i=n-1;    

    j=k-i;     

    while(j<=n-1)   {    

    cout<<" "<<a[i][j];    

    i--;    

    j++;   

    }     

    }   

    else   {    

    j=n-1;    

    i=k-j;    

    while(i<=n-1)    {     

    cout<<" "<<a[i][j];     

    i++;     

    j--;    

    }   

    }    

     }

     return 0; }

    具体分析请查询:相册中 Z字形扫描图片分析。

  • 相关阅读:
    进程与线程的一个简单解释
    如何更优雅的写出你的SQL语句
    SQL 性能优化梳理
    如何写出让同事无法维护的代码?
    Linux配置IP常用命令
    Linux中防火墙命令笔记
    蓝牙技术的工作原理及用途
    别死写代码,这 25 条比涨工资都重要
    搞清这些陷阱,NULL和三值逻辑再也不会作妖
    计算机网络:TCP和UDP的对比
  • 原文地址:https://www.cnblogs.com/lchzls/p/5037091.html
Copyright © 2011-2022 走看看