所以,我正在用Scilab编写一个程序,它解决了一个二进制难题。然而,我遇到了一个问题。谁能给我解释一下解决有间隙的二进制序列背后的逻辑(比如10-10-11 -1,其中-1表示空单元格。我想要给定序列的所有可能的解决方案。到目前为止,我有:
function P = mogelijkeCombos(V)
for i=1:size(V,1)
if(V(i) == -1)
aantalleeg = aantalleeg +1
end
end
for i=1:2^aantalleeg
//creating combos here
end
endfunction抱歉,一些单词在荷兰语中是aantalleeg的意思,我的意思是空单元格的数量,希望我给了你们足够的信息。我不需要任何代码编写,我只是喜欢我如何才能使每一个可能的再现,因为我完全卡在自动取款机的想法。
顺便说一句,这是一个学校作业,但是作业比这个大得多,它只是一个很小的部分,我需要一些想法
提前使用ty
发布于 2013-05-13 15:19:08
简短的回答
您可以通过扩展代码来创建组合,并创建所有可能的长度为"amountempty“的二进制字,然后在V的空单元格中逐位替换它们。
分步说明
查找所有空单元格positions
示例
查找所有空单元格位置
例如,您可以从左到右从1开始检查,如果单元格为空,则将该位置添加到您的位置列表中。
V = [1 0 -1 0 -1 1 -1]
^ ^ ^
| | |
1 2 3 4 5 6 7
// result
positions = [3 5 7]统计你找到的位置数
//result
amountempty = 3;创建长度为amountempty的所有可能的二进制数
您可以使用SciLab中的dec2bin函数创建所有可能的数字或单词。可能字的数量很容易确定,因为您可以通过大量位长的字来知道how much separate values can be represented。
// Create the binary word of amountEmpty bits long
binaryWord = dec2bin( i, amountEmpty );生成的binaryWord将是一个字符串,您必须将split it分成不同的位和convert it to numbers。
为您生成的每个binaryWord创建
现在,通过从原始V开始创建一个可能的解决方案,并使用binaryWordPerBit中的一小部分填充位置列表中的每个空单元格
possibleSequence = V;
for j=1:amountEmpty
possibleSequence( positions(j) ) = binaryWordPerBit(j);
end祝你"veel met je opdracht“
https://stackoverflow.com/questions/16512514
复制相似问题