二阶魔方(仿真问题)

题目:


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

我们来操作一个2阶魔方(如图1所示):


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

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

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


y 表示在y轴正向做顺时针旋转


z 表示在z轴正向做顺时针旋转



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

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

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

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

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


请编程实现所述功能。


要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性;
不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。


程序如下:

package lilu.fangzhen;

import java.util.Scanner;

public class MoFang {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        MoFang t=new MoFang();
        Scanner sc=new Scanner(System.in);
        String s=sc.nextLine();
        int[] state={0,1,2,3,4,5,6,7};//八个方块
        char[] colorx={'绿','蓝','绿','蓝','绿','蓝','绿','蓝'};//8个方块x面的颜色
        char[] colory={'红','红','红','红','橙','橙','橙','橙'};//8个方块y面的颜色
        char[] colorz={'白','白','黄','黄','白','白','黄','黄'};//8个方块z面的颜色
        t.test4(s,state,colorx,colory,colorz);
        /*for(int i=0;i<state.length;i++)
        {
            System.out.println(i+" "+state[i]);
        }*/
        for(int i=0;i<8;i++)
        {
            System.out.println(i+" "+state[i]+" "+colorx[i]+" "+colory[i]+" "+colorz[i]);
        }
        
        
    }
    
    
    
    public void test4(String s,int[] state,char[] colorx,char[] colory,char[] colorz)
    {
        for(int i=0;i<s.length();i++)
        {
            char a=s.charAt(i);
            turn(a,state,colorx,colory,colorz);
        }
    }
    
    public void turn(char a,int[] state,char[] colorx,char[] colory,char[] colorz)
    {
        if(a=='x')
        {
            //转换三个面的颜色
            char t=colorz[0];
            colorz[0]=colory[4];
            colory[4]=colorz[6];
            colorz[6]=colory[2];
            colory[2]=t;
            char t1=colory[0];
            colory[0]=colorz[4];
            colorz[4]=colory[6];
            colory[6]=colorz[2];
            colorz[2]=t1;
            char t2=colorx[0];
            colorx[0]=colorx[4];
            colorx[4]=colorx[6];
            colorx[6]=colorx[2];
            colorx[2]=t2;
            int temp=state[0];
            state[0]=state[4];
            state[4]=state[6];
            state[6]=state[2];
            state[2]=temp;
        }
        else if(a=='y')
        {
            char t=colorz[0];
            colorz[0]=colorx[2];
            colorx[2]=colorz[3];
            colorz[3]=colorx[1];
            colorx[1]=t;
            char t1=colorx[0];
            colorx[0]=colorz[2];
            colorz[2]=colorx[3];
            colorx[3]=colorz[1];
            colorz[1]=t1;
            char t2=colory[0];
            colory[0]=colory[2];
            colory[2]=colory[3];
            colory[3]=colory[1];
            colory[1]=t2;
            int temp=state[0];
            state[0]=state[2];
            state[2]=state[3];
            state[3]=state[1];
            state[1]=temp;
        }
        else if(a=='z')
        {
            char t=colorx[0];
            colorx[0]=colory[1];
            colory[1]=colorx[5];
            colorx[5]=colory[4];
            colory[4]=t;
            char t1=colory[0];
            colory[0]=colorx[1];
            colorx[1]=colory[5];
            colory[5]=colorx[4];
            colorx[4]=t1;
            char t2=colorz[0];
            colorz[0]=colorz[1];
            colorz[1]=colorz[5];
            colorz[5]=colorz[4];
            colorz[4]=t2;
            int temp=state[0];
            state[0]=state[1];
            state[1]=state[5];
            state[5]=state[4];
            state[4]=temp;
        }
    }

}



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值