uva 253 - Cube painting(相同骰子)
习题4-4 骰子涂色(Cube painting, UVa 253)
输入两个骰子,判断二者是否等价。每个骰子用6个字母表示,如图4-7所示。
图4-7 骰子涂色
例如rbgggr和rggbgr分别表示如图4-8所示的两个骰子。二者是等价的,因为图4-8(a)
所示的骰子沿着竖直轴旋转90°之后就可以得到图4-8(b)所示的骰子。
(a) (b)
图4-8 旋转前后的两个骰子
.
Sample Input
rbgggrrggbgr
rrrbbbrrbbbr
rbgrbgrrrrrg
Sample Output
TRUE
FALSE
FALSE
思路:暴力枚举,将一个骰子的所有姿态都列出来,
1、注意第一个图上的数字,那个是记录骰子面的顺序
2、先找最上面的,也就是1的位置,能排列6种(1,2,3,4,5,6)
3、然后找到了上面也就找到了与其相对的面,就是下面,就是字串中第六个元素。这个不会额外记录,因为有上就有下了。
4、然后就是中间四个的排列了,很显然,4种。
5、然后我们变换第二个骰子,看看它在这24种情况中,有没有一种的情况和第一个骰子的记录是相同的。(比较字串即可)
6、请注意骰子面的转换是否正确,虽然这个逻辑简单,但是容易写错,要好好检查,我就因为写错下标错了两次。
#include<iostream>
#include<string>
using namespace std;
/*
1
3 2 4 5 1在顶上
6
2
3 6 4 1 2在顶上
5
3
5 6 2 1 3在顶上
4
4
2 6 5 1 4在顶上
3
5
4 6 3 1 5在顶上
2
6
3 5 4 2 6在顶上
1
*/
string s1,s2;//记录两个骰子的字符串
int str_equal(string a,char s1,char s2,char s3,char s4,char s5,char s6)//比较两个字串相等吗
{
string b="0000000";
b[1]=s1;
b[2]=s2;
b[3]=s3;
b[4]=s4;
b[5]=s5;
b[6]=s6;
//cout<<b.substr(1)<<endl;
if(a==b)
return 1;
return 0;
}
int exc(string a,char s1,char s2,char s3,char s4,char s5,char s6)//中间四个面的四种情况
{
if(str_equal(a,s1,s2,s3,s4,s5,s6)) return 1;
if(str_equal(a,s1,s3,s5,s2,s4,s6)) return 1;
if(str_equal(a,s1,s5,s4,s3,s2,s6)) return 1;
if(str_equal(a,s1,s4,s2,s5,s3,s6)) return 1;
return 0;
}
int main()
{
char c;
while(cin>>c)
{
// cin>>s1;
// s2=s1.substr(5);
// s1.assign(s1,0,6);
// cout<<s1<<" "<<s2<<endl;
//以上注释是一种输入方法,以下是另一种
s1=s2="0000000";
s1[1]=c;
for(int i=2;i<=6;i++) //因为s1[1]已经在while中输入了
cin>>s1[i];
for(int i=1;i<=6;i++)
cin>>s2[i];
//cout<<s1.substr(1)<<" "<<s2<<endl;
if(exc(s1,s2[1],s2[2],s2[3],s2[4],s2[5],s2[6])){cout<<"TRUE"<<endl;continue;}
if(exc(s1,s2[2],s2[6],s2[3],s2[4],s2[1],s2[5])){cout<<"TRUE"<<endl;continue;}
if(exc(s1,s2[3],s2[6],s2[5],s2[2],s2[1],s2[4])){cout<<"TRUE"<<endl;continue;}
if(exc(s1,s2[4],s2[6],s2[2],s2[5],s2[1],s2[3])){cout<<"TRUE"<<endl;continue;}
if(exc(s1,s2[5],s2[6],s2[4],s2[3],s2[1],s2[2])){cout<<"TRUE"<<endl;continue;}
if(exc(s1,s2[6],s2[5],s2[3],s2[4],s2[2],s2[1])){cout<<"TRUE"<<endl;continue;}
cout<<"FALSE"<<endl;
}
return 0;
}
//AC at 2018/4/20
题外话:(
休战一个月后的第一道题,手生的很(才不),这道题的灵感还是来自蓝桥的直播课上老师演示的二阶魔方转换题(然而并并不会做)
因为最近一直看python,所以都不会用c++的string了,其中将字符连接起来就伤了我脑筋,不得已用了同样暴力的传进6+个参数的方法。(所谓一暴到底吗)
啊啊好想做后面的题,一直窝在第四章,会来不及看真正有用的算法的,本来以外蓝桥后算法会松一些,但是比赛还有(好事不是吗),我会继续努力的(乖孩子的话语,不喜欢)
)
uva 253 - Cube painting(相同骰子)的更多相关文章
- UVA 253 Cube painting(暴力打表)
Cube painting Problem Description: We have a machine for painting cubes. It is supplied with three d ...
- UVA 253 Cube painting(枚举 模拟)
题意: 按如图的顺序给定2个骰子的颜色(只有r.b.g三种颜色) 问2个骰子是否一模一样 如 可表示为“rbgggr” 和 “rggbgr”, 第二个就是绕着Z轴顺时针旋转90度与第一个相同的骰子. ...
- UVA 253 Cube painting
大致题意:有三种颜色,一个立方体6面都可以涂一种颜色.现在给出两个每个面都涂好颜色的立方体,判断这两个立方体通过旋转是否相等. 立方体的旋转出来的结果有很多,首先可以0,1,2,3,4,5(顺序是:上 ...
- UVa 253 Cube paiting
题意:输入两个骰子,判断是否等价 因为每一个面可以作顶面,共6*4种情况,枚举就可以了 #include<iostream> #include<cstdio> #include ...
- UVa 253
UVa 253 #include <iostream> #include <cstdio> #include <string> #include <cstri ...
- UVA 253 (13.08.06)
Cube painting We have a machine for painting cubes. It is supplied withthree different colors: blu ...
- 骰子涂色 (Cube painting,UVa 253)
题目描述:算法竞赛入门习题4-4 题目思路:1.旋转其中一个骰子进行匹配 2.进行遍历,如果匹配,就进行相对面的匹配 3.三个对立面都匹配即是一样等价的 //没有按照原题的输入输出 #include ...
- Cube painting UVA - 253
We have a machine for painting cubes. It is supplied with three different colors: blue, red and gre ...
- uva253 Cube painting(UVA - 253)
题目大意 输入有三种颜色判断两个骰子是否相同 思路(借鉴) ①先用string输入那12个字符,然后for出两个骰子各自的字符串 ②这里用的算法是先找出第一个的三个面与第二个的六个面去比较,如果找到相 ...
随机推荐
- IOS开发入门实例
关于如何创建第一个 iOS 应用 本篇“第一个 iOS 应用”教程将向你介绍 iOS 应用开发中的“三个T”: Tools(工具)如何利用 Xcode 创建和管理工程. Technologies(技术 ...
- 【NLP_Stanford课堂】语言模型1
一.语言模型 旨在:给一个句子或一组词计算一个联合概率 作用: 机器翻译:用以区分翻译结果的好坏 拼写校正:某一个拼错的单词是这个单词的概率更大,所以校正 语音识别:语音识别出来是这个句子的概率更大 ...
- 网络防火墙之iptables的前世今生和归宿
任何事物都有一个从无到有,再归于无的过程.是的,我这里用了一个绝对词:任何. 防火墙 在计算机领域中,防火墙(英文:Firewall)是一项协助确保信息安全的设备,会依照特定的规则,允许或是限制传输的 ...
- Spark天堂之门解密
本课主题 什么是 Spark 的天堂之门 Spark 天堂之门到底在那里 Spark 天堂之门源码鉴赏 引言 Spark 天堂之门就是SparkContext,这篇文章会从 SparkContext ...
- 抓取android系统日志_记录一次定位app闪退故障
在测试android客户端兼容性时,发现app闪退,上海的小伙伴需要闪退时的系统日志:故把快生锈的adb知识拿出来show一把: 1.下载adb工具包(adb的全称为Android Debug Bri ...
- C++ decltype类型说明符(尾置返回类型使用)
转自https://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 decltype 类型说明符生成指定表达式的类型.在此过程中,编译器分析 ...
- [JSOI2010]部落划分
嘟嘟嘟 一道不错的题,解法不少. 最易于理解的是最小生成树的做法: 首先每两个点之间都连一条长度为这两个点的距离的边,形成完全图. 然后跑最小生成树,直到剩k个联通块,这时候合并成k - 1个联通块的 ...
- linux jdk环境变量配置
export JAVA_HOME=/home/faunjoe/java/jdk1.8.0_45export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$J ...
- 利用Graphviz画出图
graphviz官网:http://www.graphviz.org/ 背景:有画图需要,之前见到别人用graphviz画,画出来的图漂亮,且自动帮你排版安排布局,所以自己想尝试用它画. 其中遇到的几 ...
- Android学习笔记_12_网络通信之从web获取资源数据到Android
从web获取图片信息,并显示到android的imageView控件. 一.添加网络访问权限. <uses-permission android:name="android.permi ...