我无法弄清楚这个序列 - 11110000111000110010
I can't figure out this sequence - 11110000111000110010
注意:这是作业,但我有问题的部分可以寻求帮助。
我必须编写一个序列 11110000111000110010(我正在使用 python)而不使用开关或 if 语句,并且最多只有 5 个 for 和 while。
我已经设计好了要迭代的脚本,我只是无法弄清楚该算法是递归的还是显式的,更不用说元素是 1、2 还是 4 =/
就目前我们所学的内容而言,没有方程式或算法可用于计算序列的算法。只是一组说明,用于在我们弄清楚后定义一个。有人看到我遗漏的模式吗?
编辑:我正在寻找的是确定序列的算法。
IE 序列 1,3,6,10,15 将是 a[n]=(a[n-1]+n),其中 n 是序列的索引。这将是一个递归序列,因为它依赖于前一个元素的值或索引。在这种情况下,a[n-1] 指的是前一个索引的值。
另一个序列是 2, 4, 6, 8 会变成 a[n] = (n*2) 这是一个显式序列,因为您只需要当前索引或值。
编辑:感谢所有乐于助人的人的回答....我不敢相信我没有看到它=/
注意这里有一个嵌套结构。在伪代码中(所以你自己做python):
for i in 4 .. 1:
for b in 1 .. 0:
for j in 1 .. i:
print b
b_len = 4
ones = '1111'
zeros = '0000'
s = ''
for n in range(b_len, -1, -1):
s = s + ones[:n] + zeros[:n]
print s
打印:
11110000111000110010
我明白了。四个“1”-四个“0”,三个“1”-三个“0”,两个“1”-两个“0”,一个“1”-一个“0”。一共20位。不知道是什么意思
#!/usr/bin/python
s=''
i=4
while i >0:
s=s+'1'*i+'0'*i
i -=1
print s
11110000111000110010
这个问题有很多可能的解决方案。这是一个可重复使用的解决方案,它简单地从 4 递减到 1 并添加预期数量的 1 和 0。
使用的循环数:1
def sequence(n):
string = ""
for i in range(n):
string+='1'*(n-i)
string+='0'*(n-i)
return string
print sequence(4)
还有另一种优雅且更 pythonic 的单行方式:
print ''.join(['1'*x+'0'*x for x in range(4,0,-1)])
使用的循环:1,代码行:1
;)
正是这个序列还是你想改变 1 的第一个序列的长度?
您可以像以下代码一样使用反向迭代循环:
def askedseq(max1):
seq = [] # declaring temporary sequence
for i in range(max1,0,-1): # decreasing iteration loop
seq += i*[1] + i*[0] # adding the correctly sized subseq
return seq
print askedseq(4) #prints the required sequence
print askedseq(5) #prints the equivalent sequence with 11111
打印:
11110000111000110010
111110000011110000111000110010
你也可以看看numpy做这样的事情
你可以试试这个:
print ''.join(['1'*i+'0'*i for i in range(4,0,-1)])
注意:这是作业,但我有问题的部分可以寻求帮助。
我必须编写一个序列 11110000111000110010(我正在使用 python)而不使用开关或 if 语句,并且最多只有 5 个 for 和 while。
我已经设计好了要迭代的脚本,我只是无法弄清楚该算法是递归的还是显式的,更不用说元素是 1、2 还是 4 =/
就目前我们所学的内容而言,没有方程式或算法可用于计算序列的算法。只是一组说明,用于在我们弄清楚后定义一个。有人看到我遗漏的模式吗?
编辑:我正在寻找的是确定序列的算法。 IE 序列 1,3,6,10,15 将是 a[n]=(a[n-1]+n),其中 n 是序列的索引。这将是一个递归序列,因为它依赖于前一个元素的值或索引。在这种情况下,a[n-1] 指的是前一个索引的值。 另一个序列是 2, 4, 6, 8 会变成 a[n] = (n*2) 这是一个显式序列,因为您只需要当前索引或值。
编辑:感谢所有乐于助人的人的回答....我不敢相信我没有看到它=/
注意这里有一个嵌套结构。在伪代码中(所以你自己做python):
for i in 4 .. 1:
for b in 1 .. 0:
for j in 1 .. i:
print b
b_len = 4
ones = '1111'
zeros = '0000'
s = ''
for n in range(b_len, -1, -1):
s = s + ones[:n] + zeros[:n]
print s
打印:
11110000111000110010
我明白了。四个“1”-四个“0”,三个“1”-三个“0”,两个“1”-两个“0”,一个“1”-一个“0”。一共20位。不知道是什么意思
#!/usr/bin/python
s=''
i=4
while i >0:
s=s+'1'*i+'0'*i
i -=1
print s
11110000111000110010
这个问题有很多可能的解决方案。这是一个可重复使用的解决方案,它简单地从 4 递减到 1 并添加预期数量的 1 和 0。
使用的循环数:1
def sequence(n):
string = ""
for i in range(n):
string+='1'*(n-i)
string+='0'*(n-i)
return string
print sequence(4)
还有另一种优雅且更 pythonic 的单行方式:
print ''.join(['1'*x+'0'*x for x in range(4,0,-1)])
使用的循环:1,代码行:1
;)
正是这个序列还是你想改变 1 的第一个序列的长度?
您可以像以下代码一样使用反向迭代循环:
def askedseq(max1):
seq = [] # declaring temporary sequence
for i in range(max1,0,-1): # decreasing iteration loop
seq += i*[1] + i*[0] # adding the correctly sized subseq
return seq
print askedseq(4) #prints the required sequence
print askedseq(5) #prints the equivalent sequence with 11111
打印: 11110000111000110010
111110000011110000111000110010
你也可以看看numpy做这样的事情
你可以试试这个:
print ''.join(['1'*i+'0'*i for i in range(4,0,-1)])