【蓝桥杯】历届真题 魔方旋转问题(高职组) Java

news2024/11/18 13:42:34

问题描述

  魔方可以对它的6个面自由旋转。

  我们来操作一个2阶魔方,如图:

         

  为了描述方便,我们为它建立了坐标系。

  各个面的初始状态如下:
  x轴正向:绿
  x轴反向:蓝
  y轴正向:红
  y轴反向:橙
  z轴正向:白
  z轴反向:黄

  假设我们规定,只能对该魔方进行3种操作。分别标记为:
  x 表示在x轴正向做顺时针旋转
  y 表示在y轴正向做顺时针旋转
  z 表示在z轴正向做顺时针旋转

  xyz 则表示顺序执行x,y,z 3个操作

        

         

         

  题目的要求是:
  用户从键盘输入一个串,表示操作序列。
  程序输出:距离我们最近的那个小方块的3个面的颜色。
  顺序是:x面,y面,z面。

输入输出用例

  例如:在初始状态,应该输出:
  绿红白

  初始状态下,如果用户输入:
  x
  则应该输出:
  绿白橙


  初始状态下,如果用户输入:
  zyx
  则应该输出:
  红白绿

思路与分析

        初看这道题时,出于本能就想到了使用二维数组来模拟6个面上的所有颜色。但苦于自己的空间想象能力略差,于是借助iPad上的笔记软件来进行绘图。但还是不够直观,怎么办呢?我想:干脆把它直接化为展开图来看,岂不是更直观?于是借助着展开图使用暴力方法将此题解开。

因我的图过于丑陋且使用文字表示颜色,并不直观。借用同站创作者同篇博客的展开图作为展示。

        

        原文链接:蓝桥杯:魔方旋转问题【高职组】_Cod_ing的博客-CSDN博客

代码

import java.util.Scanner;

public class Main{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		int[][] moFang = {
			{1,1,1,1}, //x轴正向
			{2,2,2,2}, //x轴反向
			{3,3,3,3}, //y轴正向
			{4,4,4,4}, //y轴反向
			{5,5,5,5}, //z轴正向
			{6,6,6,6}  //z轴反向
		};
		for(int i=0; i<str.length(); i++){
			char c = str.charAt(i);

			if(c=='x'){
				int[] s1 = new int [2];
				int[] s2 = new int [2];
				//y正-z反
				s1[0] = moFang[5][0];
				s1[1] = moFang[5][1];			
				moFang[5][0] = moFang[2][2];
				moFang[5][1] = moFang[2][0];	
				//z反-y反
				s2[0] = moFang[3][1];
				s2[1] = moFang[3][3];			
				moFang[3][1] = s1[0];
				moFang[3][3] = s1[1];				
				//y反-z正
				s1[0] = moFang[4][2];
				s1[1] = moFang[4][3];			
				moFang[4][3]=s2[0];
				moFang[4][2]=s2[1];	
				//z正-y正
				moFang[2][0]=s1[0];
				moFang[2][2]=s1[1];
				//x全对
			} else if(c=='y'){
				int[] s1 = new int [2];
				int[] s2 = new int [2];
				//z正-x反
				s1[0] = moFang[1][1];
				s1[1] = moFang[1][3];
				moFang[1][1] = moFang[4][3];
				moFang[1][3] = moFang[4][1];	
				//x反-z反
				s2[0] = moFang[5][1];
				s2[1] = moFang[5][3];
				moFang[5][1] = s1[0];
				moFang[5][3] = s1[1];
				//z反-x正
				s1[0]=moFang[0][1];
				s1[1]=moFang[0][3];
				moFang[0][1] = s2[0];
				moFang[0][3] = s2[1];
				//x正-z正
				moFang[4][1] = s1[0];
				moFang[4][3] = s1[1];
			} else if(c=='z'){
				int[] s1 = new int [2];
				int[] s2 = new int [2];
				//x正-y反
				s1[0] = moFang[3][0];
				s1[1] = moFang[3][1];
				moFang[3][0] = moFang[0][0];
				moFang[3][1] = moFang[0][1];
				//y反-x反
				s2[0] = moFang[1][0];
				s2[1] = moFang[1][1];
				moFang[1][0] = s1[0];
				moFang[1][1] = s1[1];
				//x反-y正
				s1[0] = moFang[2][0];
				s1[1] = moFang[2][1];
				moFang[2][0] = s2[0];
				moFang[2][1] = s2[1];
				//y正-x正
				moFang[0][0] = s1[0];
				moFang[0][1] = s1[1];
			}
		}
		String color = ""+moFang[0][1]+moFang[2][0]+moFang[4][3];
		for(int i=0; i<color.length(); i++){
			char color_a = color.charAt(i);
			if(color_a == '1'){
				System.out.print("绿");
			} else if(color_a == '2'){
				System.out.print("蓝");
			} else if(color_a == '3'){
				System.out.print("红");
			} else if(color_a == '4'){
				System.out.print("橙");
			} else if(color_a == '5'){
				System.out.print("白");
			} else if(color_a == '6'){
				System.out.print("黄");
			}
		}
	}
}

        此代码在思维量上并没有多大的难度,关键就是在于心细!心细!心细!初看这道题时觉得蛮简单,没想到光是数x y z这些变换让我跟它磕了两个多小时。

总结

        值得一提的是,我在自己编译器的测试用例下都可以通过,且答案正确。但无法在蓝桥杯的OJ上通过。100多行的代码我反复看了三四遍仍未发现问题所在。

        在我寻找别人的解决方案时,发现同站的小伙伴也出现了和我一样的问题。

        链接: 试题 历届真题 魔方旋转问题(Java)_地_方的博客-CSDN博客

        并且在别站的早期代码同样是无法通过的状态,而我和它代码的结果是一致的,让我不得不怀疑是否网站OJ本身的测试用例出现了问题。

         链接:算法笔记_233:二阶魔方旋转(Java) - 舞动的心 - 博客园 (cnblogs.com)

        这大概是目前对于该题最全面的解读了,有兴趣的朋友们可以自己去试试这道题,并不难,只是较为繁琐。希望能解答你的部分疑惑,如果能帮到你,我很开心。如果有大佬使用Java将该题在OJ上通过,希望可以在评论区指点一二,万分感谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/160010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hudi系列8:Hudi集成Flink

文章目录一. 相关配置1.1 拷贝编译好的jar包到Flink的lib目录1.2 拷贝guava包&#xff0c;解决依赖冲突1.3 配置环境变量二. YARN Session模式下启动Flink SQL2.1 解决依赖问题2.2 启动yarn-session2.3 在yarn session模式下启动flink sql三. 测试四. 异常问题汇总一. 相关配置…

荣誉+1,龙蜥社区荣登 CSDN 2022 中国开发者影响力年度榜单

近日&#xff0c;CSDN 在北京成功举行 “2022 中国开发者影响力盛典暨 CSDN 企业生态汇”活动&#xff0c;同时正式发布 2022 中国开发者影响力年度榜单。凭借本年度在开源领域的卓越贡献和技术实力&#xff0c;龙蜥社区荣登 CSDN 2022 “年度开发者社区” 榜单。&#xff08;图…

python基础篇之文件操作

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a;lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm1000.2115.3001.5343 哔哩哔哩欢迎关注&…

Why Can GPT Learn In-Context?

Why Can GPT Learn In-Context? Language Models Secretly Perform Gradient Descent as Meta-Optimizers 为什么GPT能够在In-context的环境中进行学习呢&#xff1f;Language Models能够像Meta-Optimizer一样秘密地执行梯度下降。 这篇文章的作者来自清华、北大&#xff0c;代…

Silane-PEG-COOH,硅烷-聚乙二醇-羧基结构式及相关应用介绍

英文名称&#xff1a;Silane-PEG-acid&#xff1b;Silane-PEG-COOH 中文名称&#xff1a;硅烷-聚乙二醇-羧基 分子量&#xff1a;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c;20k。。。 存储条件&#xff1a;-20C&#xff0c;避光&#xff0…

AI入门| 机器学习和深度学习傻傻分不清?

&#xff08;本文阅读时间&#xff1a;5分钟&#xff09;目前&#xff0c;人工智能主流的支持技术是机器学习和深度学习。二者有什么异同呢&#xff1f;文末为你揭晓&#xff01;在了解机器是怎么学习之前&#xff0c;我们先来回顾一下人类自己的学习过程。人类是如何学习的&am…

二叉树的基本操作

目录 一、二叉树遍历 1、前序遍历&#xff1a; 动态图解析&#xff1a; 2、中序遍历&#xff1a; 3、后序遍历&#xff1a; 4、层序遍历 &#xff08;利用队列&#xff09; 动态图解析&#xff1a; 二、统计二叉树的节点个数&#xff1a; 1、二叉树总节点…

【OpenAI】基于 Gym-CarRacing 的自动驾驶项目 | 车道检测功能的实现 | 边缘检测与分配 | 样条拟合

限时开放&#xff0c;猛戳订阅&#xff01; &#x1f449; 《一起玩蛇》&#x1f40d; &#x1f4ad; 写在前面&#xff1a; 本篇是关于多伦多大学自动驾驶专业项目的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D…

【High 翻天】Higer-order Networks with Battiston Federico (7)

目录传播与社会动力学&#xff08;1&#xff09;传播simplicial complexeshypergraphs传播与社会动力学&#xff08;1&#xff09; 模拟人类行为的动态过程一直是许多研究的焦点&#xff0c;其中社会关系和交互通常被认为是一种潜在结构&#xff0c;是高阶方法的天然试验场。 …

广告业务系统 之 框架沉淀 —— “数据消费型服务框架”

文章目录广告业务系统 之 框架沉淀 —— “数据消费型服务框架”数据消费型服务统一框架主流程Plugin 构建广告业务系统 之 框架沉淀 —— “数据消费型服务框架” 数据消费型服务统一框架 由于 ADX 系统中&#xff0c;大量数据以流式涌动&#xff0c;整个链路中出现了 “多处…

MMCME4_ADV与PLL4_ADV原语

MMCM与PLL ​ UltraScale器件中时钟管理模块(CMT)包含mixed-mode clock manager (MMCM) 和phase-locked loops (PLLs) 。PLL主要用来生成I/O时钟&#xff0c;也包含一部分MMCM的功能。 ​ 其中MMCM输出时钟相位调整语VCO频率相关。 MMCME4_ADV原语 ​ MMCM原语包含MMCME3_B…

2023年最新版Java入门教程,一套很哇塞的Java基础课

所谓天道好轮回&#xff0c;鬼畜饶过谁。最近B站学习区也沦陷了&#xff0c;由此诞生出了一种让人闻所未闻的冷概念&#xff1a;鬼畜教学法!这种奇怪的组合让人匪夷所思&#xff0c;但架不住网友们的推荐!!!爱嘤嘤嘤斯坦&#xff1a;早看到这些视频&#xff0c;妈妈就再也不用担…

东南亚跨境电商迅猛发展,商机转瞬即逝!

2022年中国跨境电商进入了转型调整期&#xff0c;前几年高歌猛进的发展势头似乎有所减弱。回顾2022年&#xff0c;跨境电商卖家们都表示心情复杂&#xff0c;过去一年&#xff0c;卖家们经历许多大事件&#xff0c;比如9月份拼多多强势推出Temu奔向北美市场&#xff0c;10月份字…

Linux权限和粘滞位

目录 一.权限概念 二.用户分类 三.文件权限 1.执行操作的人的分类 2.文件类型和访问权限&#xff08;事物属性&#xff09; 03.文件权限值的表示方法 四.目录权限与粘滞位 一.权限概念 操作系统用来限制对资源访问的机制&#xff0c;一件事情是否可以被“谁”做&#x…

【观察】浪潮信息龙蜥联合实验室:打造下一代操作系统,筑牢基础软件创新根基...

毫无疑问&#xff0c;在当今世界日益复杂的竞争环境下&#xff0c;随着中国企业数字化转型的加速和自主创新进程的加快&#xff0c;再加上开源和云计算已成为行业发展的大趋势之下&#xff0c;如何在“变局中开新局”&#xff1f;如何解决中国在核心基础软件领域面临的各种挑战…

Java语法七:文件操作---IO

目录 1.File概述 1.1&#xff1a;File概述的方法 2&#xff1a;文件内容的读写 2.1&#xff1a;字节流 2.1.1&#xff1a;读--InputStream 2.1.2&#xff1a;写---OutputStream 2.2&#xff1a;字符 前言&#xff1a; 这一篇我们将讲文件操作的相关方法&#xff0c;以及…

详解Reflect:Reflect和Object的异同,Reflect的一些内置方法以及方法注意点

Reflect Reflect拥有Object对象的一些内部方法&#xff0c;某些方法会同时在Object对象和Reflect对象上部署&#xff0c;也就是说Object对象上存在的方法&#xff0c;通过Reflect也可以访问到。 单论Reflect的话&#xff0c;可以这么理解&#xff0c;Reflect就是继承了Object的…

C语言学习前序 - VS Code安装

要想学习一门编程语言&#xff0c;首先要有一个好的编程工具&#xff0c;推荐大家使用VS Code。 截止到现在&#xff0c;是我最喜欢的代码编辑工具。 工具下载。 官网地址&#xff1a;https://code.visualstudio.com/ 开始下载了&#xff0c;但是很慢很慢。 下载很慢可以直…

【Leetcode面试常见题目题解】4. 盛最多水的容器

题目描述 本文是LC第11题&#xff1a;盛最多水的容器。 题目描述如下&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多…

.Net 线程安全 (细粒度锁定、无锁机制以及lock)

.Net 线程安全最省事的lock关键字线程安全对象测试环境例子使用Queue源码和结果运行效果使用ConcurrentQueue的源码和结果运行效果volatile关键字易失性内存和非易失性内存的区别易失性内存&#xff1a;非易失性内存&#xff1a;volatile 关键字可应用于以下类型的字段&#xf…