zoukankan      html  css  js  c++  java
  • ZJNU 1196

    大模拟,空想很容易把面和面之间的关系搞混

    所以这时候需要自己找一个正方体(实在不行长方体代替)跟着图把每个面正方向标出来

    然后模拟6种操作分别会对哪些块进行操作

    对于储存数据的想法是,对输入输出进行分块,以c[i][j]表示是第i个面的第j块

    具体参照下文输入输出内的

    for(i=0;i<3;i++)
        for(j=0;j<18;j++){
            scanf("%s",cd);
            c[j/3][j%3+i*3]=cd[0];
        }

    for(i=0;i<3;i++)
        for(j=0;j<18;j++)
            printf("%c%c",c[j/3][j%3+i*3],j<17?' ':'
    ');
    #include<stdio.h>
    #include<string.h>
    char c[6][9],tmp[1001];
    int getid(char c){
        switch(c){
            case 'W':return 0;
            case 'O':return 1;
            case 'R':return 2;
            case 'B':return 3;
            case 'G':return 4;
            case 'Y':return 5;
        }
    }
    void change(char cc){
        char d1,d2,d3;
        if(cc=='W'){//以O面为缓存面
            d1=c[1][0];
            d2=c[1][3];
            d3=c[1][6];
            c[1][0]=c[4][0];
            c[1][3]=c[4][3];
            c[1][6]=c[4][6];
            c[4][0]=c[3][0];
            c[4][3]=c[3][3];
            c[4][6]=c[3][6];
            c[3][0]=c[2][0];
            c[3][3]=c[2][3];
            c[3][6]=c[2][6];
            c[2][0]=d1;
            c[2][3]=d2;
            c[2][6]=d3;
        }
        else if(cc=='O'){//以W面为缓存面
            d1=c[0][2];
            d2=c[0][5];
            d3=c[0][8];
            c[0][2]=c[2][0];
            c[0][5]=c[2][1];
            c[0][8]=c[2][2];
            c[2][0]=c[5][8];
            c[2][1]=c[5][7];
            c[2][2]=c[5][6];
            c[5][8]=c[4][8];
            c[5][7]=c[4][7];
            c[5][6]=c[4][6];
            c[4][8]=d1;
            c[4][7]=d2;
            c[4][6]=d3;
        }
        else if(cc=='R'){//以O面为缓存面
            d1=c[1][6];
            d2=c[1][7];
            d3=c[1][8];
            c[1][6]=c[0][6];
            c[1][7]=c[0][7];
            c[1][8]=c[0][8];
            c[0][6]=c[3][2];
            c[0][7]=c[3][1];
            c[0][8]=c[3][0];
            c[3][2]=c[5][8];
            c[3][1]=c[5][5];
            c[3][0]=c[5][2];
            c[5][8]=d1;
            c[5][5]=d2;
            c[5][2]=d3;
        }
        else if(cc=='B'){//以G面为缓存面
            d1=c[4][0];
            d2=c[4][1];
            d3=c[4][2];
            c[4][0]=c[5][0];
            c[4][1]=c[5][1];
            c[4][2]=c[5][2];
            c[5][0]=c[2][8];
            c[5][1]=c[2][7];
            c[5][2]=c[2][6];
            c[2][8]=c[0][6];
            c[2][7]=c[0][3];
            c[2][6]=c[0][0];
            c[0][6]=d1;
            c[0][3]=d2;
            c[0][0]=d3;
        }
        else if(cc=='G'){//以B面为缓存面
            d1=c[3][6];
            d2=c[3][7];
            d3=c[3][8];
            c[3][6]=c[0][2];
            c[3][7]=c[0][1];
            c[3][8]=c[0][0];
            c[0][2]=c[1][2];
            c[0][1]=c[1][1];
            c[0][0]=c[1][0];
            c[1][2]=c[5][0];
            c[1][1]=c[5][3];
            c[1][0]=c[5][6];
            c[5][0]=d1;
            c[5][3]=d2;
            c[5][6]=d3;
        }
        else if(cc=='Y'){//以G面为缓存面
            d1=c[4][2];
            d2=c[4][5];
            d3=c[4][8];
            c[4][2]=c[1][2];
            c[4][5]=c[1][5];
            c[4][8]=c[1][8];
            c[1][2]=c[2][2];
            c[1][5]=c[2][5];
            c[1][8]=c[2][8];
            c[2][2]=c[3][2];
            c[2][5]=c[3][5];
            c[2][8]=c[3][8];
            c[3][2]=d1;
            c[3][5]=d2;
            c[3][8]=d3;
        }
        int id=getid(cc);
        d1=c[id][0];
        c[id][0]=c[id][6];
        c[id][6]=c[id][8];
        c[id][8]=c[id][2];
        c[id][2]=d1;
        d1=c[id][1];
        c[id][1]=c[id][3];
        c[id][3]=c[id][7];
        c[id][7]=c[id][5];
        c[id][5]=d1;
    }
    int main(){
        char cd[2];
        int i,j,len;
        for(i=0;i<3;i++)
            for(j=0;j<18;j++){
                scanf("%s",cd);
                c[j/3][j%3+i*3]=cd[0];
            }
        scanf("%s",tmp);
        len=strlen(tmp);
        for(i=0;i<len;i++)
            change(tmp[i]);
        for(i=0;i<3;i++)
            for(j=0;j<18;j++)
                printf("%c%c",c[j/3][j%3+i*3],j<17?' ':'
    ');
        
        return 0;
    }
  • 相关阅读:
    从无到有构建vue实战项目(二)
    从无到有构建vue实战项目(一)
    windows下nginx的安装和使用
    系统全局环境变量设置
    100个常用的linux命令
    Linux常用系统信息查看命令
    linux下搜索find命令拾遗
    linux基础优化
    linux系统基础文件属性
    正则awk和查看文件行数
  • 原文地址:https://www.cnblogs.com/stelayuri/p/12233416.html
Copyright © 2011-2022 走看看