洛谷p2007魔方

author author     2022-09-02     698

关键词:

 P2007 魔方

题目背景

常神牛从来没接触过魔方,所以他要借助计算机来玩。即使是这样,他还是很菜。

题目描述

常神牛家的魔方都是3*3*3的三阶魔方,大家都见过。

技术分享

(更正:3 4以图为准。)

作为一名菜鸟,常神牛从网上搜了一篇攻略,并找人翻译成了他自己会做的方法。现在告诉你他的魔方情况,以及他从网上搜到的攻略,请你求出最后魔方变成什么样子。

输入输出格式

输入格式:

 

输入文件为cube.out。

第一行,一串数字(长度不大于100),表示常神牛从网上搜到的攻略。

下面6*3行,每行3个数字,每三行表示魔方一个面的情况,六个面的顺序是前、后、左、右、上、下。

 

输出格式:

 

输出文件为cube.out。

6*3行,表示处理后的魔方,形式同输入。

 

输入输出样例

输入样例#1:
23
121
221
111
123
321
111
123
321
132
132
231
132
121
112
233
332
111
333
输出样例#1:
123
222
113
212
321
113
122
321
132
121
333
121
211
312
113
331
111
331

说明

【样例解释】

技术分享

技术分享

 

 

麻烦一点的模拟,但是看着样例的图还是比较好做的。

看题目中的四种操作,1,2和3,4只是方向不同,那我们就可以只考虑1,3这两种情况,至于2和4,可以分别调用3次1,3,因为4次是一圈,3次顺时针也就是1次逆时针。

喜闻乐见的Code

#include<cstdio>
#include<cstring>
using namespace std;
struct Cube {
	static const int z=4,maxop=105;
	char op[maxop],tmp[z],T[z][z];
	char front[z][z],behind[z][z];
	char left[z][z],right[z][z];
	char up[z][z],down[z][z];
	void Build_Cube() {
		scanf("%s",op);
		for(int o=1;o<=6;o++)
			for(int i=1;i<z;i++) {
				if(o==1) scanf("%s",front[i]+1);
				else if(o==2) scanf("%s",behind[i]+1);
				else if(o==3) scanf("%s",left[i]+1);
				else if(o==4) scanf("%s",right[i]+1);
				else if(o==5) scanf("%s",up[i]+1);
				else scanf("%s",down[i]+1);
			}
	}
	void Op(char c) {
		if(c==‘1‘) {
			for(int i=1;i<z;i++) tmp[i]=front[i][3];
			for(int i=1;i<z;i++) front[i][3]=down[i][3];
			for(int i=1;i<z;i++) down[i][3]=behind[i][3];
			for(int i=1;i<z;i++) behind[i][3]=up[i][3];
			for(int i=1;i<z;i++) up[i][3]=tmp[i];
			for(int i=1;i<z;i++)
				for(int j=1;j<z;j++)
					T[i][j]=right[i][j];
			for(int i=1;i<z;i++)
				for(int j=1;j<z;j++)
					right[i][j]=T[z-j][i];
		} else if(c==‘2‘) for(int i=1;i<z;i++) Op(‘1‘);
		else if(c==‘3‘) {
			for(int i=1;i<z;i++) tmp[i]=front[1][i];
			for(int i=1;i<z;i++) front[1][i]=left[1][i];
			for(int i=1;i<z;i++) left[1][i]=behind[1][i];
			for(int i=1;i<z;i++) behind[1][i]=right[1][i];
			for(int i=1;i<z;i++) right[1][i]=tmp[i];
			for(int i=1;i<z;i++)
				for(int j=1;j<z;j++)
					T[i][j]=up[i][j];
			for(int i=1;i<z;i++)
				for(int j=1;j<z;j++)
					up[i][j]=T[z-j][i];
		} else for(int i=1;i<z;i++) Op(‘3‘);
		return;
	}
	void Print() {
		for(int o=1;o<=6;o++)
			for(int i=1;i<z;i++) {
				if(o==1) printf("%s",front[i]+1);
				else if(o==2) printf("%s",behind[i]+1);
				else if(o==3) printf("%s",left[i]+1);
				else if(o==4) printf("%s",right[i]+1);
				else if(o==5) printf("%s",up[i]+1);
				else printf("%s",down[i]+1);
				puts("");
			}
	}
	void Play_Cube() {
		Build_Cube();
		for(int i=0;i<strlen(op);i++) Op(op[i]);
		Print();
	}
}cube;
int main() {
	cube.Play_Cube();
	return 0;
}

  

ac日记——魔方洛谷p2007

魔方 思路:  模拟; 代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usingnamespacestd;structMFType{intai[4][4];};structMFTypeci[7];intlen;chardone[50 查看详情

p2007魔方

洛谷——P2007魔方题目背景常神牛从来没接触过魔方,所以他要借助计算机来玩。即使是这样,他还是很菜。题目描述常神牛家的魔方都是3*3*3的三阶魔方,大家都见过。(更正:34以图为准。)作为一名菜鸟,常神牛从网... 查看详情

洛谷p2730魔板magicsquares

P2730魔板MagicSquares题目背景在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板。这是一张有8个大小相同的格子的魔板:12348765题目描述我们知道魔板的每一个方格都有一种颜色。这8种颜色用前8个正整数来表... 查看详情

洛谷p2730魔板magicsquares

P2730魔板MagicSquares题目背景在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板。这是一张有8个大小相同的格子的魔板:12348765题目描述我们知道魔板的每一个方格都有一种颜色。这8种颜色用前8个正整数来表... 查看详情

魔方二维动态还原过程matlab仿真/魔方二维平面展开(代码片段)

关键词:魔方还原;魔方二维平面展开1.魔方基础知识1.1魔方各面表示根据魔方各面所处位置将三阶魔方六个面分别用六个大写英文字母进行表示,相应面上的颜色也分别用这六个大写英文字母进行表示。魔方六个面... 查看详情

软媒魔方绿色版|软媒魔方下载

软媒魔方支持64位和32位的所有主流Windows系统,从优化大师发展为一款系统增强套装,自动化、智能化解决各种电脑问题。软媒魔方内置20余款强大、绿色化的知名组件,清理、美化、桌面增强、系统雷达、通知区万年历、优化... 查看详情

读书笔记(第五周)之魔方的创新

读书笔记(第五周)读《构建之法》之魔方的创新在不苛求比喻精准的前提下,“魔方的创新”这篇小故事写得确实有意思,也很能反映创新过程中一系列的问题。首先,通过几个大致的故事节点来总结一下情节的发展,再来逐... 查看详情

魔方的征途-魔方如何选择?

...个"我们认为一定能复原"但实际"无法复原"的魔方,看着大神们"信手拈来"的复原过程,除了惊呼"这个不可能"外,好像没其他能做的了,有些凄凉。。。最近孩子学校用到了魔方道具,... 查看详情

解魔方算法/thislethwaite解魔方算法/降群法

0.前言主流的魔方解法,从入门的层先法,到进阶的CFOP、桥式乃至盲拧,都是从部分到整体的思路,逐块逐层还原魔方。但是Thislethwaite法不同,Thislethwaite法从整体出发,不断降低魔方的混乱程度,最... 查看详情

四大古典益智玩具------三阶魔方

...姐家住了一段时间,那时候外甥女就跟说我谁谁爸爸会玩魔方。。。那时早把魔方的玩法忘得一干二净,也懒得去学了。六一儿童节要到了,给她买了魔方、九连环、华容道、孔明锁。前两种高中时玩过,后两种之前没听过,现... 查看详情

001-三阶魔方-概述及层先法

一。概述  三阶魔方,即最常见的魔方。是匈牙利布达佩斯建筑学院厄尔诺·鲁比克教授在1974年发明的。当初他发明魔方,仅仅是作为一种帮助学生增强空间思维能力的教学工具。但要使那些小方块可以随意转动而不散开... 查看详情

宇宙魔方

查看详情

hdu4801pocketcube2阶魔方

....edu.cn/showproblem.php?pid=48011.题目描述给定一个2×2×22×2×2的魔方,当某个面上的4个小块颜色均相同时,称这个面为complete。求对这个魔方进行n∈[1,7]n∈[1,7]次旋转(沿某个面顺时针或者逆时针)的过程中,求complete的面总和的最大... 查看详情

移楞魔方最上层有一块翘

在底层、中间层、最上层对齐的魔方复原法中,移楞魔方可能最后顶层有1块或3块颜色朝上,这是无法完成顶层十字架的。 例如有一块翘。孩子的同学直接拆了再装。这件事会发生的原因是:中间层的三角块(=三阶魔方的... 查看详情

3d--魔方

  css3简单动画实例,实现魔方的动画1、涉及的css属性:  (1)父元素样式中:      transform-style:preserve-3d;/*规定子元素以3D显示*/      animation:mofang10slinearinfinite;/*定义的动画名、 查看详情

bzoj1976[beijing2010组队]能量魔方cube最小割

【BZOJ1976】[BeiJing2010组队]能量魔方CubeDescription小C有一个能量魔方,这个魔方可神奇了,只要按照特定方式,放入不同的能量水晶,就可以产生巨大的能量。能量魔方是一个N*N*N的立方体,一共用N3个空格可以填充能量水晶。能量... 查看详情

matlab画三维动态魔方/旋转魔方/旋转立方体(代码片段)

以下是我的思路先了解几个重要的函数patch()函数原理:点按顺序连成封闭多边形。使用:point_sequence=[1,2,3,4];%点连接的顺序square_xyz=[3,1,3;1,1,3;1,-1,3;3,-1,3];%三维坐标4x3矩阵patch('Faces',point_sequence,'Vertices 查看详情

简单说用css做一个魔方旋转的效果(代码片段)

说明魔方大家应该是不会陌生的,这次我们来一起用CSS实现一个魔方旋转的特效,先来看看效果图!解释我们要做这样的效果,重点在于怎么把6张图片,摆放成魔方的样子,而把它们摆放成魔方的样子,重点在于用好CSS的transfor... 查看详情