习题4_4uva253 骰子涂色

这题emmm本来想找规律的,结果莫得规律只得爆摸…
看刘大大写的那弄那24种排列用了我看不懂的东西…
但其实自己模拟,会特别简单,如图

其实也就3种情况…每一种中间4个走个轮回就4种了…所以有12种,然后上下颠倒你会发现,其实只要把你原来的12种从后往前读即可…所以24种,
不说了,卡在这么水的一题2天…不暴力就会败北…
代码如下

#include <bits/stdc++.h>
using namespace std;
int q[24][6]={{0,0,0,0,0,0},
{1,2,3,4,5,6},{1,3,4,5,2,6},{1,4,5,2,3,6},{1,5,2,3,4,6},
{5,2,1,4,6,3},{5,1,4,6,2,3},{5,4,6,2,1,3},{5,6,2,1,4,3},
{2,6,3,1,5,4},{2,3,1,5,6,4},{2,1,5,6,3,4},{2,5,6,3,1,4}
};
int main()
{
	char s[18],s2[18];
	while(~(scanf("%s",s)))
	{
		int okk = 0;
		for (int i = 0; i < 6; i++)
		   s2[i] = s[i+6];
		swap(s[4],s[3]);//交换,让她和我想法中的123456顺序一样 
		swap(s2[4],s2[3]);
		for (int i = 1; i <= 12;i++)//爆摸 
		{
			int ok = 1;
			for (int j = 0; j < 6;j++)
			{
				if(s2[q[i][j]-1] != s[j])
				{
					ok = 0; break;
				}
			} 
			if(!ok)//反过来即下变上 
			{
				ok = 1; 
				for (int j = 0; j < 6; j++)
				{
					if(s2[q[i][5-j]-1] != s[j])//注意是5-j 
					{
						ok = 0;
						break;
					}
				}
			}
			if(ok) {
				okk = 1; break;
			}
		}
		if(okk) printf("TRUE\n");
		else printf("FALSE\n");
	}
	return 0;
} 
发布了55 篇原创文章 · 获赞 1 · 访问量 2670

猜你喜欢

转载自blog.csdn.net/qq_37548017/article/details/99547804