`
java-mans
  • 浏览: 11741859 次
文章分类
社区版块
存档分类
最新评论

模拟

 
阅读更多

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;
}


分享到:
评论

相关推荐

    AGV模拟.rar_AGV模拟软件_agv_agv simulation_agv模拟_chartuw8

    本压缩包提供的"AGV模拟.rar"包含了一个AGV模拟软件,该软件允许用户进行AGV的运行模拟,以测试和优化AGV系统的设计。 AGV模拟软件是进行AGV系统设计、测试和培训的重要工具。它能够通过计算机模拟AGV在实际环境中...

    android模拟按键发送消息

    在Android平台上,有时候我们需要在应用程序中模拟按键操作,例如自动发送短信、控制游戏等。"Android模拟按键"这个主题就是关于如何在代码层面模拟用户按下特定的按键,从而执行相应的功能,比如本例中的“发送消息...

    s7200模拟量库

    标题 "S7200模拟量库" 涉及的核心知识主要集中在西门子S7-200系列PLC(可编程逻辑控制器)如何处理模拟量输入和输出。S7-200系列是西门子推出的一款小型PLC,广泛应用于工业自动化领域,尤其适用于对模拟信号进行...

    基于C++的ATM机模拟程序系统源码.zip

    基于C++的ATM机模拟程序系统源码。基于C++基于C++的ATM机模拟程序系统源码。基于C++的ATM机模拟程序系统源码。基于C++的ATM机模拟程序系统源码。基于C++的ATM机模拟程序系统源码。基于C++的ATM机模拟程序系统源码。...

    模拟和数字电路基础知识汇总

    "模拟和数字电路基础知识汇总" 模拟电路和数字电路是电子技术的基础知识,它们是硬件工程师必须面对的两个基本电路。模拟电路和数字电路都有其特点和应用领域,下面我们将对这两个电路进行详细的介绍。 一、模拟...

    onvif模拟摄像机(可模拟多路)

    在"onvif模拟摄像机(可模拟多路)"的场景中,我们关注的是如何利用ONVIF协议创建一个模拟的IP摄像机,这个模拟器可以支持多路视频流,同时提供RTSP(Real Time Streaming Protocol)服务。 首先,`onvif_setip.py`...

    环保212协议模拟工具

    3. **模拟操作**:运行“EPC_212Demo.exe”,根据需求设定模拟条件,如模拟不同类型的传感器数据、设定不同的通信模式等。 4. **数据解析**:观察模拟程序产生的数据,了解数据在传输过程中的编码和解码方式,确认...

    模拟IC实习秋招找工作笔试题

    在电子工程领域,模拟集成电路(模拟IC)的设计与应用是至关重要的部分,特别是在现代电子设备中,它们负责处理和转换连续的模拟信号。对于想要进入这个领域的实习生或求职者而言,掌握相关的专业知识并能通过笔试...

    18-单个数码管模拟水流(51单片机C语言实例Proteus仿真和代码)

    18-单个数码管模拟水流(51单片机C语言实例Proteus仿真和代码)18-单个数码管模拟水流(51单片机C语言实例Proteus仿真和代码)18-单个数码管模拟水流(51单片机C语言实例Proteus仿真和代码)18-单个数码管模拟水流(51...

    模拟电路版图的艺术

    《模拟电路版图的艺术》是一本专为模拟电路设计者量身打造的世界级经典教程,它深入探讨了模拟电路在版图设计中的精髓,对于提升设计师的技能和理解具有不可估量的价值。这本书覆盖了从基础元件到复杂集成电路的诸多...

    CMD批处理模拟鼠标按键事件

    /k 启用模拟按键 keycode 虚拟键码(详情:百度) /d 按下 /u 抬起 /c 单击 专门用于批处理的。。把移动到C:/WINDOWS目录下即可! rem 在965,341位置单击一次 MouseEvent 965 341 1 rem 在窗口标题为“QQ2012...

    java 模拟登录(含验证码)

    在IT行业中,模拟登录是一项常见的任务,特别是在自动化测试、数据抓取或数据分析等领域。Java作为广泛应用的编程语言,提供了丰富的库来实现这一功能。本文将详细介绍如何使用Java进行模拟登录,特别是结合OCR技术...

    模拟电子技术基础系统方法2015-06 托马斯 L.弗洛伊德 (Thomas L.Floyd)

    Floyd的新力作,从系统的独特视角引导读者进行模拟电子技术的学习,不仅涵盖模拟电子技术的基本原理和基础知识,还重点讲解如何将基本概念和元器件应用于模拟系统,并通过系统例子和系统说明来阐明模拟系统的工作...

    JTXQ JT808模拟终端、JT1078模拟终端、部标模拟器-V1.6.7

    JTT808 部标模拟终端,...模拟终端查询的本地历史音视频来源: JT808协议菜单&gt;&gt; 摄像头拍照 点击录像, 录像文件存储在本地即为历史音视频来源。 程序说明: https://blog.csdn.net/WXL2010/article/details/126789250

    VC Demo-驱动级模拟键鼠

    在IT行业中,驱动级模拟键鼠是一种高级技术,主要用于游戏自动化、测试脚本以及辅助工具等领域。这种技术通过编写特定的驱动程序,可以绕过应用程序的常规输入限制,直接在系统层面模拟键盘和鼠标操作,从而实现高效...

    l参考_文件系统_操作系统模拟_cmd模拟_

    用一个文件来模拟一个磁盘驱动器,并在该磁盘驱动器中存放文件和目录。在模拟的磁盘驱动器中,利用文件系统的基础理论,管理记录在磁盘驱动器中的内容。写了一个命令行形式的驱动器内容访问接口,即仿照cmd.exe的...

    S7-200模拟量编程实例

    在这个“S7-200模拟量编程实例”中,我们将深入探讨如何利用S7-200 PLC进行模拟量输入和输出的编程,以及如何配合EM235模块进行实际的模拟量控制。 首先,模拟量信号是连续变化的信号,与数字量(开/关状态)不同,...

    三菱FX5U系列PLC本体自带模拟量输入输出使用方法介绍及示例.docx

    三菱FX5U系列PLC是三菱自动化产品线中的一款高性能小型可编程逻辑控制器,它集成了丰富的功能,包括内置的模拟量输入/输出模块。在本文中,我们将深入探讨如何利用FX5U系列PLC本体自带的模拟量输入输出进行操作。 1...

    西门子SMART200模拟量库及添加说明

    在处理模拟量信号时,SMART200提供了丰富的模拟量库,简化了编程过程,使得用户能够更高效地进行模拟量输入/输出的控制。本文将详细介绍西门子SMART200模拟量库的使用方法以及如何将其添加到项目中。 1. 模拟量库...

    易语言模拟按键 模拟按键

    易语言模拟按键

Global site tag (gtag.js) - Google Analytics