关闭

UVA - 253 Cube painting(骰子涂色)

标签: uva
694人阅读 评论(0) 收藏 举报
分类:

题目链接:UVA - 253 Cube painting

题目大意:
输入两个骰子,判断两个骰子是否等价,每个骰子用6个字母表示,例如
123456, 顺序为上前左右后下。

思路:
任取一个面让其位于正前( 总共6个面),然后转动上下左右四个面(转4次),这样一个骰子的所有可能表示形式就全遍历到了。
举个例子,骰子123456上下方向转动时,改变的是上前下后即1265四个面,可转动至2651,6512,5126总计四种。

代码:

#include <stdio.h>
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
#include <queue>
#include <string.h>
#include <set>
#include <stack>
#include <stdlib.h>
#include <time.h>

using namespace std;

int fa[6][6] = {
    1,2,3,4,5,6,
5,1,3,4,6,2,
    2,6,3,4,1,5,
    1,4,2,5,3,6,
    1,5,4,3,2,6,
    1,3,5,2,4,6
};

int fb[4][6] = {
    1,2,3,4,5,6,
    3,2,6,1,5,4,
    6,2,4,3,5,1,
    4,2,1,6,5,3
};

bool is(char s[], char b[])
{
    for(int i=0;i<4;i++)
    {
        char t[7];
        for(int j=0;j<6;j++)
            t[j] = s[fb[i][j]-1];
        t[6] = '\0';
        if(strcmp(t, b) == 0)
            return true;
    }
    return false;
}

int main()
{
    char a[7], b[7], s[15];
    while(cin>>s)
    {
        for(int i=0;i<6;i++)
            a[i] = s[i];
        for(int i=0;i<6;i++)
            b[i] = s[i+6];
        int i;
        b[6] = a[6] = '\0';
        for(i=0;i<6;i++)
        {
            char t[7];
            for(int j=0;j<6;j++)
                t[j] = a[fa[i][j]-1];
            t[6] = '\0';
            if(is(t, b))
                break;
        }
        if(i == 6)
            cout<<"FALSE"<<endl;
        else
            cout<<"TRUE"<<endl;
    }
    return 0;
}
0
0
查看评论

骰子涂色(Cube painting)

Cube painting  We have a machine for painting cubes. It is supplied with three different colors: blue, red and green. Each face of the cube gets...
  • qq_15096707
  • qq_15096707
  • 2015-02-07 13:43
  • 865

uva253Cube painting骰子涂色

背景:这题我写出来发生了一个奇怪的现象,就是同样的代码,在vc6.0里面运行的好好的,但在codebloke里面却死活不对,最后费了我九牛二虎之力,我终于找到了,原来数组开小了,o(︶︿︶)o 唉。 思路:分别用两个数组模拟两个骰子,定义三个旋转函数,分别绕着xyz三个方向旋转,然后定义一个判断函数...
  • qiweigo
  • qiweigo
  • 2015-02-05 17:56
  • 869

UVA - 253 Cube painting(骰子涂色)

题目链接:UVA - 253 Cube painting题目大意: 输入两个骰子,判断两个骰子是否等价,每个骰子用6个字母表示,例如 123456, 顺序为上前左右后下。思路: 任取一个面让其位于正前( 总共6个面),然后转动上下左右四个面(转4次),这样一个骰子的所有可能表示形式就全遍历到了...
  • to_be_better
  • to_be_better
  • 2015-11-21 18:11
  • 694

算法竞赛入门经典(第2版)习题4-4 骰子涂色UVa253

总结:暴力求解发有时候解决问题容易,不用想太多,就可以开始写代码。但是我觉得既然学习算法,就要多练习思维,所以我不想太依赖暴力求解。
  • wayofthinking
  • wayofthinking
  • 2015-01-10 12:20
  • 761

关于骰子的一个小算法

今天,遇到一个算法的问题,让我头疼一阵,其实也不是一道非常难的题,但奈何我怎么求都没有求出来,最后只有请教高人,才得以解决。 需求:三个骰子,他们的和为一个定值,知道骰子的人,应该很快得出这个值的取值范围为:3~18,随机求三个骰子的点数。 说明:骰子的点数为1~6,我只随机求一个组合,不想求所有点...
  • Clover_tjp
  • Clover_tjp
  • 2013-11-28 22:23
  • 1336

UVA - 253 Cube painting(涂骰子)

题意: 对于给出的两个骰子,问是否相同 ,骰子可以任意旋转。 思路:有一个很重要的规律,只要3个对面相同的话那么两个骰子就可以旋转成一样,按照这个思路,只要比较三个对面,最多比较9次就可以得出结果。 #include using namespace std; char s[13]; int m...
  • qq_37325947
  • qq_37325947
  • 2017-08-09 10:08
  • 78

UVA - 253 Cube painting

题目大意:求两个立方体是否相同
  • L123012013048
  • L123012013048
  • 2014-10-06 00:17
  • 515

UVA 253(p97)----Cube painting

#include #include #include using namespace std; char s[12]; int check(char up,char down,char fr,char be,char left,char right) { if ((up==s[6])&...
  • wang2147483647
  • wang2147483647
  • 2016-02-25 22:45
  • 238

UVa253--Cube painting--骰子涂色--重在算法思想

题目链接https://vjudge.net/problem/UVA-253 输入两个骰子,判断二者是否等价。每个骰子用6个字母表示,如下图1所示。      图 1 例如rbgggr和rggbgr分别表示如图2所示的两个骰子。二者是等价的,因为图...
  • qq_27474589
  • qq_27474589
  • 2017-07-20 20:51
  • 157

UVa 253 Cube painting (骰子涂色)

题意: 给两个骰子,每枚骰子每个面由红(red),蓝(blue),绿(green)三种颜色之一染色,可以把每枚骰子按照图示方式编号,然后按照编号给出颜色顺序,问这两枚骰子能否通过旋转变成展示的颜色相对位置一致? 思路: 可以将一枚骰子的颜色顺序不变,将另一枚旋转,看旋转过程中是否有颜色完全重合的...
  • Ramay7
  • Ramay7
  • 2015-12-19 09:53
  • 459
    ~~~
    欢迎访问我的新博客地址:shiyi.fightcoder.com
    有问题,可以发邮件到 shiyi19960604@qq.com ,不要私信了,以后大概不太登csdn了。
    个人资料
    • 访问:259413次
    • 积分:4337
    • 等级:
    • 排名:第8276名
    • 原创:166篇
    • 转载:8篇
    • 译文:0篇
    • 评论:88条
    博客专栏
    最新评论