概述
今天花了不少时间来研究如何打印一个之字形zigzag矩阵,参考了下http://blog.163.com/yangjun1988422@126/blog/static/4741291720117842634276/,具体思路和程序在下面。
// test2.cpp : 定义控制台应用程序的入口点。
//Date:2015年6月17日
//Author: jsalienzy
/* 0 1 5 6 14 15 27 28
* 2 4 7 13 16 26 29 42
* 3 8 12 17 25 30 41 43
* 9 11 18 24 31 40 44 53
* 10 19 23 32 39 45 52 54
* 20 22 33 38 46 51 55 60
* 21 34 37 47 50 56 59 61
* 35 36 48 49 57 58 62 63 */
//a[0][0],a[0][1],a[1][0],a[2][0],a[1][1],a[0][2],a[0][3]
//zigzag排列顺序
//具体思路:
//1.建立一个动态二维数组用来存储数据
//2.把矩阵分为上下两个半区,左上半区和右下半区
//3.左上半区按行进行遍历,分为奇偶列,偶列依次减小,奇列依次增加(依次表示的是斜的顺序)
//4.右下半区也按行进行遍历,奇从下往上依次增加,偶从下往上依次减小
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int **data;
//一个n*n的矩阵,使用动态数组
int n;
cout<<"请输入n*n矩阵的行列数:";
cin>>n;
data=new int *[n];
for(int i=0; i<n; i++)
{
data[i]=new int [n];
}
//初始化二维矩阵
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
data[i][j]=0;
}
}
int x,y;
int count=0;
//左上半区
for(int i=0; i<n; i++)
{
if(i%2==0)
{
x=i;
y=0;
for(int j=0; j<i+1; j++)
{
data[x--][y++]=count++;
}
}
if(i%2==1)
{
x=0;
y=i;
for(int j=0; j<i+1; j++)
{
data[x++][y--]=count++;
}
}
}
//右下半区
for(int i=1; i<n; i++)
{
if(i%2==0)
{
x=i;
y=n-1;
for(int j=0; j<n-i; j++)
{
data[x++][y--]=count++;
}
}
if(i%2==1)
{
x=n-1;
y=i;
for(int j=0; j<n-i; j++)
{
data[x--][y++]=count++;
}
}
}
//打印二维矩阵
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
cout<<setw(5)<<data[i][j]<<" ";
}
cout<<endl;
}
//销毁二维矩阵
for(int i=0; i<n; i++)
{
delete [] data[i];
}
delete [] data;
system("pause");
return 0;
}
结果:
最后
以上就是冷静便当为你收集整理的打印zigzag数组的全部内容,希望文章能够帮你解决打印zigzag数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复