从右上角到左下角沿反对角线打印方阵中的元素

问题描述:从右上角到左下角沿反对角线打印方阵中的元素。假设矩阵为:

1,2,3,4

5,6,7,8

9,10,11,12

13,14,15,16

输出:4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13,

分析:这个没有什么算法问题,就是纯粹的代码技巧问题,通过画图可以找出规律,只要确定每条反对角线的两端的坐标,就可以打印出对角线上的元素。因此可以将其分成两部分打印,定义两个变量row和column来保存矩阵的行数和列数,定义两个变量x和y来作为临时坐标变量。可确定出两部分的范围为打印(0,x)-(y,column-1)对角线上的元素,打印(x,0)-(row-1,y)对角线上的元素,具体代码如下:

import java.util.*;
public class Main1 {
	public static void orderprint(int a[][]){
        if(a==null){
            System.out.println("数组不存在");
            return ;
        }
        int row=a.length,column=a[0].length;
        if(row==0 || column==0){
            System.out.println("数组为空数组");
            return ;
        }
        int y=0,x=column-1;
        while(x>=0 && y<=row-1){        //打印(0,x)-(y,column-1)对角线上的元素
        	for(int j=x,i=0;j<=column-1 && i<=y;i++,j++)
        		System.out.print(a[i][j]+",");
        	    x--;y++;
        }
        x=1;y=column-2;
        while(y>=0 && x<=row-1){        //打印(x,0)-(row-1,y)对角线上的元素
        	for(int i=x,j=0;i<=row-1 && j<=y;i++,j++)
        		System.out.print(a[i][j]+",");
        	    x++;y--;
        }

    }
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
      int a[][]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
      orderprint(a);
    }    

}

样例输出结果为:4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13,

时间: 2024-11-10 07:34:21

从右上角到左下角沿反对角线打印方阵中的元素的相关文章

C语言 反序打印字符串中的单词

int main() { char *str = "see you later"; int r = strlen(str); char * p = str; int a= 0; while(*str++!='\0') { if(*str == ' ') { a++; } } str-=(r+1); int arr[a]; int i,j; for(i =1,j=0;i<r;i++) { if(*str ==' ') { arr[j] = i; j++; } str++; } st

javascript reverse()反序排列数组中的元素

javascript reverse()可以颠倒数组中元素的顺序,该方法会改变原来的数组,而不会创建新的数组 <!DOCTYPE html> <html> <head> <title>Runde</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="tex

条码打印软件中修改数据库连接的教程

最新版BarTender 2016的八大功能特性之一就是改进的数据库连接,其数据库对话框更加直观,有更多数据库功能选项.本文,小编就教大家如何在BarTender 2016直观的数据库对话框修改数据库连接. 1.在BarTender 2016中,单击数据库连接按钮,根据向导提示连接对应excel数据库. 2.单击选择"表"选项卡,在此您可以单击"Select Tabels...",添加或删除要使用的数据库中的工作表. 3.在"筛选器"选项卡,用户

递归打印lua中的table

递归打印lua中的table,并写到文件里: 1 local pairs_by_keys = function(inTable) 2 local temp = {} 3 for k, v in pairs(inTable) do 4 temp[#temp + 1] = k 5 end 6 7 local compare = function(a, b) 8 if type(a) == type(b) then 9 return a < b 10 elseif type(a) == "num

动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

 1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /************************************************************************/ /*数组的结构体类型                                                    */ /*******************

【译】 AWK教程指南 3计算并打印文件中指定的字段数据

awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段:程序中可使用 $1, $2,... 直接取得各个字段的内容.这个特色让使用者易于用 awk 编写 reformatter 来改变数据格式. 范例:以数据文件 emp.dat 为例,计算每人应发工资并打印报表. 分析:awk 会自行一次读入一条记录,故程序中仅需告诉 awk 如何处理所读入的数据行. 执行如下命令:($ 表UNIX命令行上的提示符)  $ awk '{ print $2, $3 * $4 }'

9.10扩展性与存储限制(三)——若只有4KB内存可用,该如何打印数组中所有重复的元素

/** * 功能:给定一个数组,包含1到N的整数,N最大为32000,数组可能含有重复的值,且N的取值不定. * 若只有4KB内存可用,该如何打印数组中所有重复的元素. */ /** * 思路:4KB最多殉职8*4*2^10个比特.比32000大.创建含有32000个比特的位向量,其中每个比特代表一个整数. * 遇到重复元素,打印出来. * @param array */ public static void checkDuplicates(int[] array){ BitSet bs=new

3D打印闪耀中博会,“湖南智造”再展新风采 ——华曙高科推出全球首款开源可定制化金属3D打印机

"2015中国中部投资贸易博览会"5月18日在武汉拉开帷幕,湖南省商务厅组织我省代表企业积极参与.其中,华曙高科技有限责任公司作为国内3D打印产业领军企业在展会发布全球首款开源可定制化金属3D打印机FS271M,成为此次展会的一大亮点. 随着我国将3D打印提升到国家战略层面,以及今年首个"国家计划"的出台,3D打印产业的发展得到越来越多人的关注.机遇与挑战并存,面对国内尚不成熟的3D打印产业发展,以及以美.德为首的国际3D打印产业巨头的市场竞争,本土3D打印企业如何

反射---输入一个类,打印出类中所有元素

package com.sadhu; import java.util.*; import java.lang.reflect.*; /** 反射---输入一个类,打印出类中所有元素 reflect包中有三个描述类元素的类:Field.Method.Constructor */ public class Sample {     public static void main(String[] args)     {         String name;//收集用户输入的类