关于塑料棒的位置是否会因为轮换操作影响最终结果
查看原帖
关于塑料棒的位置是否会因为轮换操作影响最终结果
67476
kasugano_sora楼主2023/6/5 14:07

题目里对塑料棒交换进行的是轮换操作,最终结果从内圈到外圈是 Y R G ,顺序操作显然 G Y R 和 R G Y 也都是可以满足结果的,但是如果出现了 R Y G 这样的顺序还能够满足最终结果吗?该题的所有题解都是直接计算的不同颜色塑料棒的数量而没有考虑位置因素,如果题目是0点位置的塑料棒可以任意交换就很好理解题解的做法,但如果是顺序操作能否证明无论什么样的顺序都可以达到最终的结果呢?

上面是我最开始拟的问题,写到一半突然发现可以用代码证明一下,思路就是用“1”“2”“3”来代替不同的颜色,当前数量前提满足时,枚举所有的序列,然后遍历所有操作看能否得出最终结果,代码最终跑出来结果是肯定的,我把代码贴在下面,同样对这个问题不解的同学可以拿去跑几遍调试调试看看结果,如果有大佬可以给出书面证明的话,愿意补充在这个讨论下面那就更好啦。

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int cnt,judge=0,v[10][10][10][10][10][10];

void work(int a1,int b1,int b2,int c1,int c2,int c3,int k)
{
//	cout<<a1<<" "<<b1<<" "<<b2<<" "<<c1<<" "<<c2<<" "<<c3<<" "<<"步数为:"<<k<<endl; 
	if(judge) return;
	if(v[a1][b1][b2][c1][c2][c3]==0) v[a1][b1][b2][c1][c2][c3]=1;
	else return;
	if(a1==1 and b1==2 and b2==2 and c1==3 and c2==3 and c3==3)
	{
		cnt=k;
		judge=1;
		return;
	}
	work(c1,a1,b2,b1,c2,c3,k+1);
	work(c1,b1,a1,b2,c2,c3,k+1);
	work(c2,a1,b2,c1,b1,c3,k+1);
	work(c2,b1,a1,c1,b2,c3,k+1);
	work(c3,a1,b2,c1,c2,b1,k+1);
	work(c3,b1,a1,c1,c2,b2,k+1);
}

int main()
{
	int a[7]={0,1,2,2,3,3,3};
	do{
		work(a[1],a[2],a[3],a[4],a[5],a[6],1);
		cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<" "<<a[4]<<" "<<a[5]<<" "<<a[6]<<": ";
		if(judge) cout<<"ok"<<endl;
		else cout<<"nonono"<<endl;
	}while(next_permutation(a+1,a+1+6));
}
2023/6/5 14:07
加载中...