/*======================================================================
二维数组右上左下遍历
总时间限制: 1000ms 内存限制: 65536kB
描述
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按从左上到右下的对角线顺序遍历整个数组。
输入
输入的第一行上有两个整数,依次为row和col。
余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 < col < 100)
输出
按遍历顺序输出每个整数。每个整数占一行。
样例输入
3 4
1 2 4 7
3 5 8 10
6 9 11 12
样例输出
1
2
3
4
5
6
7
8
9
10
11
12 解析:这个题目需要分情况讨论行数和列数的大小关系,不同情况不同的处理方式。
上图当中,以土黄色斜排为分隔界限把矩阵分成了两个或三个部分,每一部分都需要用两重循环来完成。其中:外层循环控制斜排的层数,内层循环控制一个斜排内部的单元个数。
上三角部分斜排个数等于列数(row>col)或行数(row<col),下三角部分斜排的个数等于列数(row>col)或行数(row<col)(当然,其中有些部分需要注意多1或少1的问题,
毕竟分界线所在的斜排可以属于相邻的两个部分当中的任意一个。具体的请看代码和注释。)
========================================================================*/
 #include<stdio.h>
int main()
{
int row,col,a[][],i,j,x,y,t;
freopen("55555.in","r",stdin);
freopen("result.out","w",stdout);
scanf("%d%d",&row,&col);
for(i=;i<row;i++)
{
for(j=;j<col;j++)
{
scanf("%d",&a[i][j]);
}
}
/*for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}*/
/**/
if(row>col)
{
t=col;//斜排数量
for(j=;j<t;j++)//循环处理每一个斜排
{
y=j;//每个斜排第一个单元的纵坐标
x=;//每个斜排第一个单元的横坐标
for(i=;i<=j;i++,x++,y--)//i控制每个斜排内部单元的个数
{
printf("%d\n",a[x][y]);
}
} t=row-col;
for(j=;j<=t;j++)
{
y=col-;
x=j;
for(i=;i<=col;i++,x++,y--)
{
printf("%d\n",a[x][y]);
}
} t=col-;
for(j=t;j>;j--)
{
y=col-;
x=row-j;
for(i=;i<j;i++,x++,y--)
{
printf("%d\n",a[x][y]);
}
}
}
else if(row<col)
{
t=row;
for(i=;i<=t;i++)
{
x=;
y=i-;
for(j=;j<=i;j++,x++,y--)
{
printf("%d\n",a[x][y]);
}
} t=col-row;
for(i=;i<=t;i++)
{
x=;
y=row+i-;
for(j=;j<=row;j++,x++,y--)
{
printf("%d\n",a[x][y]);
}
} t=row-;
for(i=t;i>;i--)
{
x=row-i;
y=col-;
for(j=;j<=i;j++,x++,y--)
{
printf("%d\n",a[x][y]);
}
}
}
else
{
t=row;
for(i=;i<=t;i++)
{
x=;
y=i-;
for(j=;j<=i;j++,x++,y--)
{
printf("%d\n",a[x][y]);
}
} t=row-;
for(i=t;i>;i--)
{
x=row-i;
y=col-;
for(j=;j<=i;j++,x++,y--)
{
printf("%d\n",a[x][y]);
}
}
} return ;
}

下面是一些测试案例:

1 2 4 7 11 16 22
3 5 8 12 17 23 29
6 9 13 18 24 30 36
10 14 19 25 31 37 43
15 20 26 32 38 44 50
21 27 33 39 45 51 57
28 34 40 46 52 58 64
35 41 47 53 59 65 71
42 48 54 60 66 72 78
49 55 61 67 73 79 85
56 62 68 74 80 86 92
63 69 75 81 87 93 99
70 76 82 88 94 100 105
77 83 89 95 101 106 110
84 90 96 102 107 111 114
91 97 103 108 112 115 117
98 104 109 113 116 118 119
1 2 4 7 11 16 22 28 34 40 46 52 58 64 70
3 5 8 12 17 23 29 35 41 47 53 59 65 71 76
6 9 13 18 24 30 36 42 48 54 60 66 72 77 81
10 14 19 25 31 37 43 49 55 61 67 73 78 82 85
15 20 26 32 38 44 50 56 62 68 74 79 83 86 88
21 27 33 39 45 51 57 63 69 75 80 84 87 89 90
1 2 4
3 5 7
6 8 10
9 11 12
1 2 4 7
3 5 8 11
6 9 12 14
10 13 15 16

这个其实可以考虑把上面的这么多次相类似的代码写成子函数。

(row<col)

OpenJudge计算概论-二维数组右上左下遍历的更多相关文章

  1. 百练6376-二维数组右上左下遍历-2015正式C题

    C:二维数组右上左下遍历 总时间限制:  1000ms 内存限制:  65536kB 描述 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按从左上到右下的对角线顺 ...

  2. 20130330 printf数组改变 数组指针便利二维数组 二级指针遍历二维数组 ZigZag

    1.为什么printf之后数组的值会改变? #include<stdio.h> ; int * Zigzag() { ,j=,limit=; ; ; int a[N][N]; int (* ...

  3. c/c++ 图相关的函数(二维数组法)

    c/c++ 图相关的函数(二维数组法) 遍历图 插入顶点 添加顶点间的线 删除顶点 删除顶点间的线 摧毁图 取得与v顶点有连线的第一个顶点 取得与v1顶点,v1顶点之后的v2顶点的之后的有连线的第一个 ...

  4. JavaSE-06 二维数组

    学习要点 二维数组的定义 二维数组内存数据结构 不规则二维数组 二维数组的定义 语法格式 格式一 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. ...

  5. C Tricks(十七)—— 对角线元素的屏蔽、二维数组(矩阵)的遍历

    1. 对角线元素的屏蔽 使用 if + continue 实现对对角线元素的屏蔽 for u in range(n): for v in range(n): if u == v: continue . ...

  6. Java编程基础阶段笔记 day06 二维数组

    二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...

  7. Java连载68-数组的拷贝、二维数组

    一.数组的拷贝 函数arraycopy(),参数为:源数组.源数组的开始下标.目标数组.目标数组的开始下标.拷贝长度 package com.bjpowernode.java_learning; ​ ...

  8. PHP导出excel文件,第二步先实现自写二维数组加入模板excel文件后导出

    今天主要研究数据加入EXCEL并导出的问题,先不从数据库提取数据导出,自己先写一个二维数组,然后遍历二维数组写入excel模板中导出,首先根据模板excel的内容书写对应的二维数组 $arr=arra ...

  9. JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.一维数组 1.1 数组的声明和初始化声明方式: String str[]; //不建议使用 Stri ...

随机推荐

  1. Linux命令(1)-创建文件

    版本:centos7 1.可以使用cat创建一个新的文件 命令:cat>>filename 使用cat创建文件时,以系统默认的文件属性作为新文件的属性,并接受键盘输入作为文件的内容.输入结 ...

  2. EF中逆变和协变

    EF中的增删改查: 实现步骤: 1.声明一个EF的上下文. bjhksjEntities dbContext = new bjhksjEntities(); 2.声明一个实体. HKSJ_USERS ...

  3. ERP仓库管理系统查询(十)

    需求:    1.根据仓库编号,获取仓库信息绑定至页面相关控件. 2.根据仓库编号,获取管理员信息绑定到页面相关控件 修改的界面: <%@ Page Language="C#" ...

  4. 3、网页制作Dreamweaver(表单form)

    表单form (虚线不显示) 1.写法: <form id="form1" name="form1" method="post" ac ...

  5. Smart210学习记录-----linux定时器

    1.内核定时器: Linux 内核所提供的用于操作定时器的数据结构和函数如下: (1) timer_list 在 Linux 内核中,timer_list 结构体的一个实例对应一个定时器 1 stru ...

  6. magento后台登陆被锁定 索引报错的解决:General error: 1205 Lock wait timeout

    1. magento在索引的时候用shell,有时候会报错: General error: 1205 Lock wait timeout exceeded 这个时候,是因为行锁的原因,在表中您直接用s ...

  7. 【题解】【排列组合】【素数】【Leetcode】Unique Paths

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  8. 21. Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  9. HDU 5692 线段树+dfs序

    Snacks Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  10. iPhone4@iOS7Beta4,第一时间刷上,失望,看来苹果是铁了心往扁平化UI走了。看好我的614,保存好SHSH准备

    1 今天早上看到新闻,iOS7Beta4放出了,于是赶紧,在家下载,网速很快.(要是在公司,那50K的速度,估计会疯的) 2 等了一会儿一直在提示准备安装,不等了,再等该迟到了. 3 路上实在忍不住, ...