Zigzag Matrix
Time Limit:1000MS Memory Limit:655360K
Total Submit:33 Accepted:17
Description
Produce a zig-zag array. A zig-zag array is a square arrangement of the first N*M integers, where the numbers increase sequentially as you zig-zag along the anti-diagonals of the array. The figure
below shows the zigzag sequence.
For example, given (5, 5), (the number of row and columns), the zigzag matrix should be:
0 1 5 6 14
2 4 7 13 15
3 8 12 16 21
9 11 17 20 22
10 18 19 23 24
Input
There are multiple test cases, each test case contains one line with two integers N, M and a string D (1<=N*M<=10000).
N is the number of rows, M is the number of columns. D is the start direction, could be “Right” or “Down”. “Right” means the sequence should start from (0, 0) to (0, 1), and “Down” means the sequence should start from (0, 0) to (1, 0).
Output
For each test case, you should output the zigzag matrix.
Sample Input
2 2 Right
3 4 Down
Sample Output
0 1
2 3
0 2 3 8
1 4 7 9
5 6 10 11
//模拟
#include <iostream>
#include <cstdio>
using namespace std;
int N, M;
char D[10];
int map[10010];//题的关键转换为一维数组
void solve()
{
int x, y;
x = 0, y = 0;
int dir;
int ans = 0;
map[x * M + y] = ans ++;
while(!(x == N - 1 && y == M - 1))
{
if(y < M - 1)
{
dir = 1;
y ++;
map[x * M + y] = ans ++;
}
else if(x < N - 1)
{
dir = 3;
x ++;
map[x * M + y] = ans ++;
}
while(x != N -1 && y != 0)
{
dir = 2;
x ++;
y --;
map[x * M + y] = ans ++;
}
if(y == 0)
{
if(x < N - 1)
{
dir = 3;
x ++;
map[x * M + y] = ans ++;
}
else if(y < M - 1)
{
dir = 1;
y ++;
map[x * M + y] = ans ++;
}
}
else if(x == N - 1)
{
if(y < M - 1)
{
dir = 1;
y ++;
map[x * M + y] = ans ++;
}
}
while(x != 0 && y != M - 1)
{
dir = 4;
x --;
y ++;
map[x * M + y] = ans ++;
}
}
}
int main()
{
while(scanf("%d%d%s", &N, &M, D) != EOF)
{
int i, j;
if(D[0] == 'D')
{
int temp = N;
N = M;
M = temp;
}
solve();
if(D[0] == 'R')
{
for(i = 0; i < N; ++ i)
{
for(j = 0; j < M; ++ j)
{
if(j) printf(" ");
printf("%d", map[i * M + j]);
}
printf("\n");
}
}
else if(D[0] == 'D')
{
for(i = 0; i < M; ++ i)
{
for(j = 0; j < N; ++ j)
{
if(j) printf(" ");
printf("%d", map[j * M + i]);
}
printf("\n");
}
}
}
return 0;
}
分享到:
相关推荐
模拟硬盘物理序列号模拟硬盘物理序列号模拟硬盘物理序列号模拟硬盘物理序列号模拟硬盘物理序列号模拟硬盘物理序列号模拟硬盘物理序列号模拟硬盘物理序列号模拟硬盘物理序列号模拟硬盘物理序列号模拟硬盘物理序列号...
在海洋工程、海洋物理学以及船舶设计等领域,模拟海浪是一项重要的研究任务,它涉及到复杂的物理过程和数值计算方法。MATLAB作为一种强大的数值计算工具,被广泛应用于海浪模拟的建模与仿真。本资料包“海浪模拟.zip...
西门子模拟量库是专为处理工业自动化领域中的模拟信号而设计的一种软件工具,它在数字控制系统中扮演着至关重要的角色。模拟量库的主要功能是将来自传感器或执行器的模拟信号转换成数字信号,以便于计算机进行精确的...
模拟电子技术PPT(学习使用好资料).zip模拟电子技术PPT(学习使用好资料).zip模拟电子技术PPT(学习使用好资料).zip模拟电子技术PPT(学习使用好资料).zip模拟电子技术PPT(学习使用好资料).zip模拟电子技术PPT(学习使用...
基于C++的ATM机模拟程序系统源码。基于C++基于C++的ATM机模拟程序系统源码。基于C++的ATM机模拟程序系统源码。基于C++的ATM机模拟程序系统源码。基于C++的ATM机模拟程序系统源码。基于C++的ATM机模拟程序系统源码。...
1、Unity模拟组合键输入组件 //模拟按键A: keybd_event(Keys.A, 0, 0, 0); //模拟组合键CTRL + A: //public const int KEYEVENTF_KEYUP = 2; //keybd_event(Keys.ControlKey, 0, 0, 0); //keybd_event(Keys.A...
"模拟和数字电路基础知识汇总" 模拟电路和数字电路是电子技术的基础知识,它们是硬件工程师必须面对的两个基本电路。模拟电路和数字电路都有其特点和应用领域,下面我们将对这两个电路进行详细的介绍。 一、模拟...
欧姆龙CP2E模拟量例程主要涉及的是在工业自动化控制中使用欧姆龙PLC(可编程逻辑控制器)CP2E-N60DR-A与模拟量模块CP1W-AD041来处理来自第三方压力传感器的4-20mA信号。这一配置在许多工业应用中非常常见,用于精确...
3. **模拟操作**:运行“EPC_212Demo.exe”,根据需求设定模拟条件,如模拟不同类型的传感器数据、设定不同的通信模式等。 4. **数据解析**:观察模拟程序产生的数据,了解数据在传输过程中的编码和解码方式,确认...
在电子工程领域,模拟集成电路(模拟IC)的设计与应用是至关重要的部分,特别是在现代电子设备中,它们负责处理和转换连续的模拟信号。对于想要进入这个领域的实习生或求职者而言,掌握相关的专业知识并能通过笔试...
其模拟量处理能力强大,支持多种模拟量输入/输出模块,如FX3U-4AD、FX3U-4DA等,这些模块可以采集和处理模拟量信号。 在三菱PLC中编写模拟量程序时,我们需要关注以下几个关键点: 1. **通道配置**:每个模拟量...
18-单个数码管模拟水流(51单片机C语言实例Proteus仿真和代码)18-单个数码管模拟水流(51单片机C语言实例Proteus仿真和代码)18-单个数码管模拟水流(51单片机C语言实例Proteus仿真和代码)18-单个数码管模拟水流(51...
本篇将重点讲解欧姆龙PLC中的模拟量处理,包括模拟量指令的使用、工程量的转换以及程序编写实践。 首先,我们要理解什么是模拟量。模拟量是指连续变化的物理量,如温度、压力、电流等,它们可以取无数个值,与数字...
《模拟人生3 1.63超级电脑》是一款基于经典模拟经营游戏《模拟人生3》的特殊模组,旨在提升游戏中角色使用的电脑性能至“超级”级别。在模拟人生的虚拟世界里,玩家可以控制自己的模拟市民进行日常生活,工作,娱乐...
### Delphi 模拟按键精灵鼠标、键盘操作详解 #### 一、让Webbrowser响应回车事件 在Delphi中模拟键盘与鼠标操作是一种常见的技术手段,特别适用于自动化测试或者辅助工具开发。本篇文章主要介绍了如何利用Delphi来...
《模拟电路版图的艺术》是一本专为模拟电路设计者量身打造的世界级经典教程,它深入探讨了模拟电路在版图设计中的精髓,对于提升设计师的技能和理解具有不可估量的价值。这本书覆盖了从基础元件到复杂集成电路的诸多...
在油气资源的勘探与开发领域,精确的油藏数值模拟是至关重要的。它可以帮助工程师们有效地进行油藏开发方案的设计、评估与调整,从而提高油气开采的效率和经济性。《CMG油藏数值模拟中文教程》就是针对这一需求而...
模拟电子技术作为电子工程领域的重要分支,在现代科技发展中占据着举足轻重的地位。随着电子技术的不断进步,模拟电子的应用领域也在不断扩大,从传统的通信、音响设备到新兴的自动化控制、医疗电子等,模拟电路扮演...
在IT行业中,模拟登录是一项常见的任务,特别是在自动化测试、数据抓取或数据分析等领域。Java作为广泛应用的编程语言,提供了丰富的库来实现这一功能。本文将详细介绍如何使用Java进行模拟登录,特别是结合OCR技术...
在IT领域,模拟键盘按键是一种常见技术,尤其在自动化测试、脚本编程或者游戏辅助工具中广泛应用。模拟键盘按键能够使计算机程序模拟人手在物理键盘上的操作,从而实现自动输入或者控制其他应用程序的行为。以下将...