Waring :这项任务是由我80岁以上的教授给出的,没有人理解他有时会想要什么,我不期望更多的标准方法来解决这个问题,而不仅仅是因为问题很难,但是因为我的教授是老派的前苏联疯子;)(他喜欢简单易事,只是为了解释为什么会在这里发布)
这个任务是纯粹的理论,但我不知道如何用文字形式化它 问题:
输入时给出9位二进制代码,我们必须打印" 0"在输出中 如果值的数量为" 1"比数量少两倍 具有值" 0"的位,如果此条件为假,则必须打印 " 1"在输出中。
我在我的描述中提出的是引入一个计数器,然后计算值为1的位,然后根据此计数器进行输出,但我被认为是一个白痴,我被告知有'没有柜台的方式,我选择最难的方式。有人知道确定输出内容的更好方法吗?
提前致谢,如果描述看起来很乱,那就很抱歉
答案 0 :(得分:3)
当TM读取输入位时,状态编号必须捕获从0到9的所看到的位数,这样我们才能识别到达结束的时间,以及看到的1位数,相关案例为0,1,2,3和> = 4。
编码所有相关可能性所需的状态少于10 * 5 = 50个。当机器进入指示已经看到9个输入位的状态之一时,如果它表示已经看到3个1,则写入0,否则写入1,然后停止。
请注意,我们不需要使用磁带进行存储 - 输入语言是常规的,因此可以使用有限状态机来决定,并且不需要无限存储。
答案 1 :(得分:0)
虽然Matt是正确的,但您可以使用存储将此问题概括为任意输入大小。
1
。标记它。
1
,请转到第7步。0
。标记它。
0
,请转到第9步。0
。标记它。
0
,请转到第9步。0
。
0
。停止。1
。停止。这适用于任何输入尺寸。直观地说,我们为输入中的每个0
寻找2 1
s,确保0
位的1
位是<a th:href="@{/order/{id}/details(id=3,action='show_all')}">
位的两倍。