Applese 走方格

链接:https://ac.nowcoder.com/acm/contest/330/B
来源:牛客网

题目描述

精通程序设计的 Applese 又写了一个游戏。

在这个游戏中,它位于一个 n 行 m 列的方阵中的左上角(坐标为(0, 0),行的序号为0∼n−10∼n−1,列的序号为0∼m−10∼m−1)。

现在它想不重复地走过所有格子(除了起点),最后回到左上角的一个方案。

每次只能往上下左右其中一个方向走一格。

输入描述:

仅一行两个整数 n 和 m,表示方阵的大小。保证大于1×11×1。

输出描述:

    如果存在方案,则输出一行操作,包含"L"、"R"、"U"、"D",分别表示左、右、上、下。
如果有多种方案,输出任意一种即可。如果没有方案,则在一行中输出"-1"。

示例1

输入

2 2

输出

RDLU

示例2

输入

2 3

输出

RRDLLU

备注:

1≤n,m≤10

这个题就是老老实实模拟就行了,总格子数是偶数的时候才能够走回去(如果是奇数一定走不回去,还有只有一行也走不回去),此题要注意1 2和2 1的情况。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<cstring>
#define pi 3.1415926
using namespace std;

typedef long long LL;
const int Max_n=100005;
char a[Max_n];

int main(){ 
	int n,m;
	scanf("%d%d",&n,&m);
	if((n*m)%2==1){
		printf("-1\n");
	}else if(n==1||m==1){
		if(n==1&&m==2)
			printf("RL\n");
		else if(n==2&&m==1)
			printf("DU\n");
		else
			printf("-1\n");
	}else{
		if(n%2==0){
			for(int i=1;i<=n;i++){
				if(i==1){
					for(int j=2;j<=m;j++)
						printf("R");
				}else if(i==n){
					for(int j=2;j<=m;j++)
						printf("L"); 
					break;
				}else{
					if(i%2==1){
						for(int j=3;j<=m;j++)
							printf("R");
					}else{
						for(int j=3;j<=m;j++)
							printf("L");
					}
				}
				printf("D");
			}
			for(int j=2;j<=n;j++)
				printf("U");
			printf("\n");
		}
		if(n%2!=0&&m%2==0){
			for(int i=1;i<=m;i++){
				if(i==1){
					for(int j=2;j<=n;j++)
						printf("D");
				}else if(i==m){
					for(int j=2;j<=n;j++)
						printf("U");
					break;
				}else{
					if(i%2==1){
						for(int j=3;j<=n;j++)
							printf("D");
					}else{
						for(int j=3;j<=n;j++)
							printf("U");
					}
				}
				printf("R");
			} 
			for(int i=2;i<=m;i++)
				printf("L");
			printf("\n");
		}
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值