蓝桥杯之二阶魔方旋转(第二种方法)

2024-03-02 01:38

本文主要是介绍蓝桥杯之二阶魔方旋转(第二种方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

我们来操作一个2阶魔方(如图1所示)
为了描述方便,我们为它建立了坐标系。

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

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

基本旋转后的效果如图2,3,4所示。
这里写图片描述这里写图片描述

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

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

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

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

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

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。


这里写图片描述

这里写图片描述


package 魔方;import java.util.Scanner;public class Exe2 {//定义24个面的颜色  public  String[] mian=new String[25];  public static void main(String[] args) {  // TODO Auto-generated method stub  Exe2 m=new Exe2();  m.init();  m.getString();  m.getResult();  }  //初始化24个面的颜色  public  void init(){  for (int i=1;i<5;i++){   //x zheng  mian[i]="绿";  }  for (int i=5;i<9;i++){  //y zheng  mian[i]="红";  }  for (int i=9;i<13;i++){  //z zheng  mian[i]="白";  }  for (int i=13;i<17;i++){  //x fan  mian[i]="蓝";  }  for (int i=17;i<21;i++){  //y fan  mian[i]="橙";  }  for (int i=21;i<25;i++){  //z fan  mian[i]="黄";  }  }  //定义读取函数  public  void getString(){  Scanner sc=new Scanner(System.in);  String str=sc.nextLine();  for (int i=0;i<str.length();i++){  String next=str.substring(i, i+1);  if (next=="x"){  reX();  }  if (next=="y"){  reY();  }  if (next=="z"){  reZ();  }  }  }  //输出结果(最靠近我们那个正方体的三个面)  public  void getResult(){  System.out.println(mian[2]+mian[5]+mian[9]);  }//定义绕x轴旋转的函数  public  void reX(){  String[] sa=revertZheng(mian[1],mian[2],mian[3],mian[4]);  for(int i=1;i<5;i++){  mian[i]=sa[i-1];  }  String[] sb=revertZheng(mian[10],mian[9],mian[5],mian[8],mian[22],mian[21],mian[19],mian[18]);  mian[10]=sb[0];mian[9]=sb[1];mian[5]=sb[2];mian[8]=sb[3];  mian[22]=sb[4];mian[21]=sb[5];mian[19]=sb[6];mian[18]=sb[7];  }  //定义绕y轴旋转的函数  public  void reY(){  String[] sa=revertZheng(mian[5],mian[6],mian[7],mian[8]);  mian[5]=sa[0];mian[6]=sa[1];mian[7]=sa[2];mian[8]=sa[3];  String[] sb=revertZheng(mian[9],mian[12],mian[13],mian[16],mian[23],mian[22],mian[3],mian[2]);  mian[9]=sb[0];mian[12]=sb[1];mian[13]=sb[2];mian[16]=sb[3];  mian[23]=sb[4];mian[22]=sb[5];mian[3]=sb[6];mian[2]=sb[7];  }  //定义绕z轴旋转的函数  public  void reZ(){  String[] sa=revertZheng(mian[10],mian[11],mian[12],mian[9]);  mian[10]=sa[0];mian[11]=sa[1];mian[12]=sa[2];mian[9]=sa[3];  String[] sb=revertZheng(mian[18],mian[17],mian[14],mian[13],mian[6],mian[5],mian[2],mian[1]);  mian[18]=sb[0];mian[17]=sb[1];mian[14]=sb[2];mian[13]=sb[3];  mian[6]=sb[4];mian[5]=sb[5];mian[2]=sb[6];mian[1]=sb[7];  }  //定义正对我们那四个面的旋转函数  public  String [] revertZheng(String s1,String s2,String s3,String s4){  String a="";  a=s1;  s1=s4;  s4=s3;  s3=s2;  s2=a;  String[] ss=new String[4];  ss[0]=s1;ss[1]=s2;ss[2]=s3;ss[3]=s4;  return ss;  }  //侧面8个面的旋转函数  public  String [] revertZheng(String s1,String s2,String s3,String s4,String s5,String s6,String s7,String s8){   String a="",b="";  a=s1;b=s2;  s1=s7;  s2=s8;  s7=s5;  s8=s6;  s5=s3;  s6=s4;  s3=a;  s4=b;  String[] ss=new String[8];  ss[0]=s1;ss[1]=s2;ss[2]=s3;ss[3]=s4;ss[4]=s5;ss[5]=s6;ss[6]=s7;ss[7]=s8;  return ss;  }  }

转载自:http://blog.csdn.net/wildcatlele/article/details/8764601

这篇关于蓝桥杯之二阶魔方旋转(第二种方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

java String.join()方法实例详解

《javaString.join()方法实例详解》String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了... 目录bVARxMJava String.join() 方法详解1. 方法定义2. 基本用法2.1 拼接

java连接opcua的常见问题及解决方法

《java连接opcua的常见问题及解决方法》本文将使用EclipseMilo作为示例库,演示如何在Java中使用匿名、用户名密码以及证书加密三种方式连接到OPCUA服务器,若需要使用其他SDK,原理... 目录一、前言二、准备工作三、匿名方式连接3.1 匿名方式简介3.2 示例代码四、用户名密码方式连接4

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依