https://www.luogu.org/problem/show?pid=2007
题目背景
常神牛从来没接触过魔方,所以他要借助计算机来玩。即使是这样,他还是很菜。
题目描述
常神牛家的魔方都是3*3*3的三阶魔方,大家都见过。
(更正:3 4以图为准。)
作为一名菜鸟,常神牛从网上搜了一篇攻略,并找人翻译成了他自己会做的方法。现在告诉你他的魔方情况,以及他从网上搜到的攻略,请你求出最后魔方变成什么样子。
输入输出格式
输入格式:
输入文件为cube.out。
第一行,一串数字(长度不大于100),表示常神牛从网上搜到的攻略。
下面6*3行,每行3个数字,每三行表示魔方一个面的情况,六个面的顺序是前、后、左、右、上、下。
输出格式:
输出文件为cube.out。
6*3行,表示处理后的魔方,形式同输入。
这题真是恶心到我了 谁让我想象力差 怪我喽
应该有更简便的写法 没找到啥规律 直接模拟 但是网上找程序对拍的时候发现我写的其实没有那么长...
#include<iostream> #include<cstring> #include<cstdio> using namespace std; ],mf[][]; ]={,,,,,,,,,},f2[]={,,,},f3[]={,,,}; void roate1(int k){ ]; ;i<=;i++){ go[f[i]]=mf[k][i]; };i<=;i++) mf[k][i]=go[i]; } void O1(){ roate1(); ]; ;i<=;i++) t[i]=mf[][f3[i]]; ;i<=;i++) mf[][f3[i]]=mf[][f3[i]]; ;i<=;i++) mf[][f3[i]]=mf[][f3[i]]; ;i<=;i++) mf[][f3[i]]=mf[][f3[i]]; ;i<=;i++) mf[][f3[i]]=t[i]; } void O2(){ O1();O1();O1(); } void O4(){ roate1();roate1();roate1(); ]; ;i<=;i++) t[i]=mf[][f2[i]]; ;i<=;i++) mf[][f2[i]]=mf[][f2[i]]; ;i<=;i++) mf[][f2[i]]=mf[][f2[i]]; ;i<=;i++) mf[][f2[i]]=mf[][f2[i]]; ;i<=;i++) mf[][f2[i]]=t[i]; } void O3(){ O4();O4();O4(); } char in(){ char c=getchar(); while(c=='\n'||c==' ')c=getchar(); return c; } int main() { //freopen("mf.in","r",stdin); //freopen("mf.out","w",stdout); scanf("%s",op); ;i<=;i++){ ;j<=;j++) cin>>mf[i][j]; } ;i<strlen(op);i++){ switch(op[i]){ ':O1(); break; ':O2(); break; ':O3(); break; ':O4(); break; } } ;i<=;i++){ ;j<=;j++){ printf("%c",mf[i][j]); ==) printf("\n"); } } ; }
呵呵
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; ]; ][][], t1, t2, t3; void show(int k) { int i, j; ;i<=;i++) { ;j<=;j++)printf("%d",mat[k][i][j]); printf("\n"); } } void fu(int &a1, int &a2, int &a3, int &b1, int &b2, int &b3) {a1=b1;a2=b2;a3=b3;} void solve(int o) { ) { fu(t1,t2,t3,mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],t1,t2,t3); fu(t1,t2,t3,mat[][][],mat[][][],mat[][][]);//顺时针 fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],t1,t2,t3); } ) { fu(t1,t2,t3,mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],t1,t2,t3); fu(t1,t2,t3,mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],t1,t2,t3); } ) { fu(t1,t2,t3,mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],t1,t2,t3); fu(t1,t2,t3,mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],t1,t2,t3); } ) { fu(t1,t2,t3,mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],t1,t2,t3); fu(t1,t2,t3,mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],mat[][][],mat[][][],mat[][][]); fu(mat[][][],mat[][][],mat[][][],t1,t2,t3); } } int main() { freopen("mf.in","r",stdin); freopen("ans.out","w",stdout); int i, j, k; ]; scanf(); ;k<=;k++) { ;i<=;i++) { scanf(); ;j<=;j++)mat[k][i][j]=s[j]-; } } ;order[i];i++)solve((); ;k<=;k++)show(k); ; }