Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 开发一个算法,用于;“不倒翁问题”;_Algorithm - Fatal编程技术网

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)
由于只能将总和更改为+2和-2,因此起始总和必须为偶数-起始处需要存在偶数个未正确对齐的不倒翁

因为有偶数个1,所以你的算法每次移动都应该把两个1变成0。在一个开始可解决的设置上,永远不需要做任何其他动作

您的算法应该将不倒翁表示为一个位列表,如
不倒翁=[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之前做一些自己的研究。此外,解决办法也不难找到。