puzzle(1313)彩色迭代、一触即发

目录

一,彩色迭代

四色三阶

四色四阶

四色六阶

四色八阶

三色三阶

三色四阶

n色五阶

二,同色最小步数

三,异形彩色迭代

1,本身+八邻居

2,本身+对角四邻居

四,六边形彩色迭代

2*2*2模式

2*3*3模式

五,异形六边形彩色迭代

2*2*2模式

 2*3*3模式

六,三角形彩色迭代

七,一触即发

练习模式

比赛模式


一,彩色迭代

黑白迭代是每个格子只有01两种状态,如果换成彩色(多色),或者换成数字0-n,n>1,则是多状态迭代。

最强大脑项目是四色迭代:

我们把点击当成加1,那么颜色和数字的对应关系就是:0红 1黄 2蓝 3绿。

四色三阶

  

先调整成左右对称的,再按照类似黑白迭代的思路,变换第一行的点击次数,然后依次从上往下复原。

四色四阶

先弄出对称的,再完成前三行,看看最后一行是什么状态

如果是这个状态那么就简单了,第一行只把第一个格子点一下,其他格子不动,然后依次复原即可。

四色六阶

先弄成对称的:

再根据公式硬推,第一行一二三格对底层的影响分别是112 133 230,当前局面离目标是303,所以是133+230*3,即第一行的第二五格点1下,第三四格点3下,然后依次按行复原即可。

四色八阶

8*8的要弄成对称的都不容易,只能用公式硬推了。

首先算出第一行前四个格子单击一次对最后一行的影响:

20003200   02032320   00123232  03312323  

算出对最后一行对称性的影响:

如20003200,就是2000-0023=2021,同理可得四个分别是2021  0011  2133  1103

现在最后一行是黄红黄黄绿绿黄黄,离对称的距离是0200

0200=0011*2+2133*2,所以点击第一行第二个格子第三个格子各2次,即可变成对称的:

算出第一行四组格子对最后一行的影响:

如20003200就是20003200+00230002=20233202,即2023(取前一半),同理可得四个分别是2023  0031  2331  3123

现在最后一行是绿黄黄黄,即0222

0222=2331*2

所以点击第一行第三个格子第六个格子各2次,再按行依次完成即可全部完成。

下面的例子来自苹果APP“翻转-统一颜色”,规则是全部同色即可,和限定一个颜色规则差不多。

三色三阶

三色四阶

还是先变成左右对称:

然后就很容易找到答案了:

n色五阶

首先复原上面4行,假设最后一行5个格子离复原分别差x1,x2,x3,x4,x5步,那么全局操作方程组的推导如下

得到的这个方程组的系数矩阵的秩为3

于是只要解3个mod n的同余方程即可。

二,同色最小步数

如果彩色迭代不设定固定的目标局面,而是只要求所有格子同色,那么最少需要点击多少次?

点亮所有的灯的代码改一改即可:(J是单个格子的状态数)


#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
#include<algorithm>
#include <cmath>
using namespace std;

int m, n, a;
int l[17];
int temp[17];
int J = 9;


int yihuo(int a, int b, int j)
{
	int ans = 0, s = 1;
	while (a > 0 && b > 0)
	{
		ans += (a % j + b % j) % j * s;
		a /= j, b /= j, s *= j;
	}
	ans += a * s + b * s;
	return ans;
}

int g(int k, int s)
{
	int t = int(pow(J * 1.0, n) + 0.1);
	return yihuo((t - 1) / (J - 1) * s, yihuo(t - 1 - k, (t - 1) / (J - 1), J), J);
}

int f(int k, int s)
{
	k = g(k, s);
	return yihuo(yihuo(k % int(pow(J * 1.0, n-1) + 0.1) * J, k, J), k / J, J);
}

bool ok(int k, int s)
{
	for (int i = 0; i < 17; i++)temp[i] = l[i];
	temp[0] = g(k,s);
	for (int i = 1; i < m; i++)
	{
		temp[i] = yihuo(temp[i] , f(temp[i - 1],s),J);
		temp[i + 1] = yihuo(temp[i + 1] , g(temp[i - 1],s),J);
	}
	temp[m] = yihuo(temp[m] , f(temp[m - 1],s),J);
	return temp[m] == (int(pow(J * 1.0, n) + 0.1) - 1) / (J - 1) * s;
}
int getSum(int k,int s)
{
	int ans = 0;
	for (int i = 0; i < 17; i++)temp[i] = l[i];
	temp[0] = g(k, s);
	for (int i = 1; i <= m; i++)
	{
		int tmp = g(temp[i - 1],s);
		while (tmp)ans += tmp % J, tmp /= J;
		temp[i] = yihuo(temp[i], f(temp[i - 1],s), J);
		temp[i + 1] = yihuo(temp[i + 1], g(temp[i - 1],s), J);
	}
	return ans;
}
void out(int k, int s)
{
	for (int i = 0; i < 17; i++)temp[i] = l[i];
	temp[0] = g(k, s);
	for (int i = 1; i <= m; i++)
	{
		int tmp = g(temp[i - 1],s);
		for (int j = 0; j < n; j++)
		{
			cout << tmp % J;
			tmp /= J;
			if (j < n - 1)cout << " ";
		}
		cout << endl;
		temp[i] = yihuo(temp[i] , f(temp[i - 1],s),J);
		temp[i + 1] = yihuo(temp[i + 1] , g(temp[i - 1],s),J);
	}
}

int main()
{
	int t = 100;
	for (int id = 1; id <= t; id++) {
		m = 3, n = 3;
		for (int i = 0; i <= 17; i++)l[i] = 0;
		for (int i = 1; i <= m; i++) {
			int s = 1;
			for (int j = 0; j < n; j++)
			{
				cin >> a;
				l[i] += a*s;
				s *= J;
			}
		}
		//cout << "PUZZLE #" << id << endl;
		int m = 123456, mk=0, mj = 0;
		for (int k = 0; k < int(pow(J * 1.0, n) + 0.1); k++)
		{
			for (int j = 0; j < J; j++) {
				if (ok(k, j) && m > getSum(k, j))m = getSum(k, j), mk = k, mj = j;
			}
		}
		out(mk, mj);
	}
	return 0;
}

输入:

0 3 3 
7 7 8 
5 6 6

输出:

0 7 0
3 0 0
0 2 2

即最少要点14次才能全部变成一样的数字。

三,异形彩色迭代

1,本身+八邻居

3阶

先变成对称:

然后就很容易变成每一行都是同色,而每一行都是同色和复原状态则是近在咫尺。

4阶

2,本身+对角四邻居

3阶

按奇偶性分组,先搞定一组:

 另一组按照这个颜色去调整就行了。

4阶

 

四,六边形彩色迭代

2*2*2模式

先变成左右对称局面:

再寻找对称解。

2*3*3模式

先变成左右对称局面:

 

 再寻找对称解:

五,异形六边形彩色迭代

异形六边形彩色迭代是影响本身+三邻居。

2*2*2模式

先变成左右对称局面:

 再寻找对称解。

 2*3*3模式

 先变成左右对称局面:

  再寻找对称解。

六,三角形彩色迭代

(1)

先以左上角绿色为准随意调一下:

再以孤立的红色为准,三次操作即可全部换成红的。

(2)

一样的思路:

七,一触即发

最强大脑同款项目。一触即发是3D版彩色迭代。

练习模式

(6)

第一层黄的要换成红的,第二层红的要换成黄的。

第一层点击第一行的2个各一次,再点击第二层复原即可。

(9)

先调成每一层的颜色相同

再继续复原即可。

比赛模式

简单

这个就没那么容易直接调成每层的颜色相同,只能先调成两层都是对称的,再按规律调整了。

普通

困难

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值