uva 253

Wesley13
• 阅读 660

习题4-4 骰子涂色(Cube painting, UVa 253) 输入两个骰子,判断二者是否等价。每个骰子用6个字母表示,如图4-7所示。 图4-7 骰子涂色 例如rbgggr和rggbgr分别表示如图4-8所示的两个骰子。二者是等价的,因为图4-8(a) 所示的骰子沿着竖直轴旋转90°之后就可以得到图4-8(b)所示的骰子。 uva 253 (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+个参数的方法。(所谓一暴到底吗) 啊啊好想做后面的题,一直窝在第四章,会来不及看真正有用的算法的,本来以外蓝桥后算法会松一些,但是比赛还有(好事不是吗),我会继续努力的(乖孩子的话语,不喜欢) )

点赞
收藏
评论区
推荐文章
Karen110 Karen110
3年前
建议收藏,22个Python迷你项目(附源码)
在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作。下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程。大家也可根据项目的目的及提示,自己构建解决方法,提高编程水平。①骰子模拟器目的:创建一个程序来模拟掷骰子。提示:当用户询问时,使用random模块生成一个1到6之间
Aidan075 Aidan075
3年前
讲解Excel的16种图表类型的“含义”,知道该怎么画图了!
大家好,我是小五🐶相同的数据,使用不同的图表进行体现,效果也会千差万别,那么我们应该如何正确选择,才能让图表的作用发挥到极致呢?1.柱形图柱形图是最常见的图表类型,它的适用场合是二维数据集(每个数据点包括两个值,即X和Y),但只有一个维度需要比较的情况。例如,如下图所示的柱形图就表示了一组二维数据,【年份】和【销售额】就是它的两个维度,但只需要比
Wesley13 Wesley13
3年前
UML图类的构造方法怎么画
初用UML图有些人会跟我一样想,类的构造方法没有返回值怎么画,百度不到答案让人感到无语,那只能自己动手了。!(https://oscimg.oschina.net/oscnet/6b2e0f78a3b5d44fc8767f68bd7447f3e98.png)如图所示,这是由Eclipse的AmaterasUML自动生成UMl类图的结果。构
可莉 可莉
3年前
10.3【前端开发】背景图片:如何使用精灵图?
!(https://oscimg.oschina.net/oscnet/49b46c3445a34eca8f9d8e48b2223bea.gif)!(https://oscimg.oschina.net/oscnet/dbe49d47cc24412d9a5254db635dc816.png)精灵图可以减少网络请
Stella981 Stella981
3年前
Spring Boot 学习之路二 配置文件 application.yml
一、创建配置文件如图所示,我们在resources文件夹中新建配置文件application.yml!(https://oscimg.oschina.net/oscnet/81914332c3b1bdcfa48b1135b636d93024f.jpg)结构图二、一些基本配置server:
Easter79 Easter79
3年前
SpringBoot使用@ServerEndpoint无法依赖注入问题解决(WebSocket)
!(https://oscimg.oschina.net/oscnet/up8420801906305684903bceca6a85673cb00.png)!(https://oscimg.oschina.net/oscnet/upf7112141748204868f0368c51f4ea919103.png)如上两图所示,在WebSoc
Stella981 Stella981
3年前
DuangDuangDuang!码云项目的 Readme
我们在码云(https://git.oschina.net/)上创建新项目的时候,常常会看到默认使用README文件初始化该项目(如图1所示),然后在新建项目的根目录下就会生成一个README.md文件(如图2所示)。!图1(https://static.oschina.net/uploads/img/201702/2622463
Wesley13 Wesley13
3年前
2021 音视频技术趋势不完全预测
!(https://oscimg.oschina.net/oscnet/c8b9139f83f24be1885e31b962d4a08f.png)_TheEconomist__(经济学人)_在_TheWorldin2021_特别刊的编者序中写到:“21是一个与好运、冒险、机遇和掷骰子有关的数字——它
Wesley13 Wesley13
3年前
5月15日java上机任务
1、制作一个如图所示的界面(使用FlowLayout布局),不要求实现功能。 !(https://oscimg.oschina.net/oscnet/eab027aa705c9b743a98b01297c2cd490cc.jpg)2、设计一个用标签、文本行与按钮来登录的界面(用GridLayout布局方式)。如图所示。 !(https:/
小万哥 小万哥
6个月前
多项分布模拟及 Seaborn 可视化教程
多项分布是二项分布的推广,描述了在n次试验中k种不同事件出现次数的概率分布。参数包括试验次数n、结果概率列表pvals(和为1)和输出形状size。PMF公式展示了各结果出现次数的概率。NumPy的random.multinomial()可生成多项分布数据。练习包括模拟掷骰子和抽奖活动。解决方案提供了相关图表绘制代码。关注公众号“LetusCoding”获取更多内容。