打印zigzag数组

今天花了不少时间来研究如何打印一个之字形zigzag矩阵,参考了下http://blog.163.com/[email protected]/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;
}

结果:

时间: 2024-10-14 02:16:01

打印zigzag数组的相关文章

利用指针地址偏移打印一维数组

// //  main.c //  利用指针地址偏移打印一维数组 // // Created by wanghy on 15/7/24. // Copyright (c) 2015年 wanghy. All rights reserved. // #include <stdio.h> #define len 10 int main(int argc, const char * argv[]){ //定义一个存放  int 类型元素的一维数组. int arry[]={1,2,3,4,5,6,7

Zigzag数组

首先了解下zigzag数组,如下图,由一个矩阵的对角线,数字按一定规律递增 求nxn的Zigzag数组? 代码如下: /* 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 */ cla

以符合人类阅读的方式打印php数组

在程序开发过程中:打印数据进行查看调试是非常频繁的:如果没有一种易于阅读的样式那是相当痛苦的: 先定义一个数组: 1 2 3 4 5 6 7 8 9 $array=array(     't0'=>'test0',     't1'=>'test1',     't3'=>array(         'tt0'=>'test0',         'tt1'=>'test1',         'tt3'=>'test3',         )     ); 如果用p

算法总结之 不重复打印排序数组中相加和胃给定值的所有三元数组

这个问题跟上一个 大同小异,如何不重复打印呢? 首先保证选定三元数组中第一个值不重复,剩下的就跟前一个题目一样了. package TT; public class Test69 { public static void printUniqueTired(int[] arr, int k){ if(arr==null || arr.length<3){ return; } for(int i =0; i<arr.length-2; i++){ if(i==0 || arr[i] != arr[

PHP 重新格式化var_dump/print_r打印的数组

// 在使用var_dump/print_r时 打印出来的数组 都是一行显示的, 看起来不方便 function dump($vars, $label = '', $return = false) { if (ini_get('html_errors')) { $content = "<pre>\n"; if ($label != '') { $content .= "<strong>{$label} :</strong>\n";

用递归正/逆序打印一个数组,以及调用返回的过程理解

1 #include <stdio.h> 2 /* 3 题目:用递归正/逆序打印数组的元素,以及递归调用的过程理解 4 正序打印数组解题思路:第一:数组元素是连续的.知道第一个元素的地址,就能推算出第二个元素的地址.以此类推 5 第二:数组的结束条件:i = sizeof(arr)/4 -1; 此时的值为arr[sizeof(arr)/4-1]; 6 第三:后一个元素的值的下标 = 前一个元素的值的下标+1 (通项公式) 7 */ 8 void arr1(int *p,int n,int *p

用c++实现一个n*n矩阵,矩阵沿着45度递增,形成zigzag数组

#include<stdio.h> #include<iostream> using namespace std; int main() { int N; int s, i, j; int squa; cin>>N; squa = N*N; /*为指向int型指针的指针分配空间, 该指针指向n个int型指针*/ int **a = (int **)malloc(N* sizeof(int)); if (a == NULL) return 0; for (i = 0; i

剑指offer-顺时针打印矩阵-数组-python

题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ''' zip() 函数用于将可迭代的对象作为参数, 将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭

js打印对象数组信息

function writeObj(obj){ var description = ""; for(var i in obj){ var property=obj[i]; description+=i+" = "+property+"\n"; } alert(description); }