Algorithm 开发一个算法,用于;“不倒翁问题”;
问题陈述:几只玻璃杯在桌子上排成一行。有些玻璃杯倒过来了,有些倒过来了。必须把所有的玻璃杯向上转动。但是,不倒翁不能单独转动;允许的动作是同时转动任意两个玻璃杯。从玻璃杯的哪个初始状态可以将所有的玻璃杯向上转动Algorithm 开发一个算法,用于;“不倒翁问题”;,algorithm,Algorithm,问题陈述:几只玻璃杯在桌子上排成一行。有些玻璃杯倒过来了,有些倒过来了。必须把所有的玻璃杯向上转动。但是,不倒翁不能单独转动;允许的动作是同时转动任意两个玻璃杯。从玻璃杯的哪个初始状态可以将所有的玻璃杯向上转动 我需要理解这个问题,并为这个问题开发一个算法因为不倒翁的开头要么是颠倒的,要么是正面朝上的,所以用二进制的方式来思考——每个不倒翁都有一点:正确的方向=0,错误的=1。因此,当您完成该问题时,总和将为0(全部为0) 另外请注意,如果您必须一次执行2项操作,则有3种可能的操作: 将1转换
我需要理解这个问题,并为这个问题开发一个算法因为不倒翁的开头要么是颠倒的,要么是正面朝上的,所以用二进制的方式来思考——每个不倒翁都有一点:正确的方向=0,错误的=1。因此,当您完成该问题时,总和将为0(全部为0) 另外请注意,如果您必须一次执行2项操作,则有3种可能的操作:
- 将1转换为0,将0转换为1(净变化为-1+1=0)
- 将两个0翻转为1(净变化为1+1=2)
- 将两个1翻转为0(净变化为-1-1=-2)
不倒翁=[0,1,1,0]
。
首先,通过对列表求和并检查是否偶数来检查可解性:
solvable=(总和(不倒翁)%2==0)
。
只有在它是可解的情况下,设置一个循环来求解:
if(solvable)
while(sum(tumblers)!=0)
found = 0
indexA = null
indexB = null
foreach(tumblers as index=>tumbler)
if(found==2)
break //exit foreach loop since you found two 1's
endif
if(tumbler==1)
found++
if(indexA==null)
indexA = index
else
indexB = index
endif
endif
endforeach
tumblers[indexA] = 0
tumblers[indexB] = 0
endwhile
endif
你到底被困在哪里?你尝试过什么?这是一个经典,我建议你在询问stackoverflow之前做一些自己的研究。此外,解决办法也不难找到。