给定一个数组,编写一个算法来打印所有可能的子数组。输入的第一行包含一个整数 T,表示测试用例的数量。然后是 T 测试用例。每个测试用例包含一个整数 N 表示数组 A 的大小。然后在接下来的行中是表示数组 A 的 N 个空格分隔的值。在新行上打印每个子数组元素。
t = int(input())
for z in range(t):
n = int(input())
a = list(map(int, input().split()))
for i in range(n):
for j in range(i,n+1):
for k in range(i,j):
print(a[k], end=" ")
print()
输入样本
1
3
1 2 3
样本输出
1
1 2
1 2 3
2
2 3
3
我已经尽力了。
如果您的问题是有空行,请简化代码以直接对列表进行切片以获取所有需要的项目。
您可以在
print
中使用解包来默认使用空格分隔元素。
t = int(input())
for z in range(t):
n = int(input())
a = list(map(int, input().split()))
for i in range(n):
for j in range(i+1,n+1):
print(*a[i:j])
输入/输出:
1
3
1 2 3 # end of input
1
1 2
1 2 3
2
2 3
3
您可以通过像这样的简单而通用的方式来代替您所做的事情:
a = input().split()
for i in range(len(a)):
for j in range(len(a)):
if j>=i:
print(*a[i:j+1])
输出:
1
1 2
1 2 3
2
2 3
3
尝试以下操作:
t = int(input())
for z in range(t):
n = int(input())
a = []
for y in range(n):
x = int(input())
a.append(x)
for i in range(n):
for j in range(i,n+1):
for k in range(i,j):
print(a[k], end=" ")
print()
(试试这个)您可以通过下一个获取并打印数组的所有子集:
在数组 A 的每一步中,我们对每个元素都有两种选择,要么忽略该元素,要么将该元素包含在子集中。
function
def subsetsUtil(A, subset, index):
print(*subset)
for i in range(index, len(A)):
# include the A[i] in subset.
subset.append(A[i])
# move onto the next element.
subsetsUtil(A, subset, i + 1)
# exclude the A[i] from subset and
# triggers backtracking.
subset.pop(-1)
return
def subsets(A):
global res
subset = []
# keeps track of current element in vector A
index = 0
subsetsUtil(A, subset, index)
array = [1, 2, 3]
subsets(array)
-> res 将存储所有子集。
O(2 ^ (number of elements inside array))
--> 因为在每一步我们都有两个选择:包含或忽略。
具有列表理解:
[a[i:j+1] for i in range(len(a)) for j in range(len(a)) if j>= i]
代码是用基本语法给出的答案的另一个版本
for i in range(int(input())):#no of testcases eg:1
n=int(input())#no of input eg:3
x=list(map(int,input().split()))#values in the input eg:1 2 3
l=[]
for j in range(n):
for k in range(j,n):
l.append(x[k])
print(*l)
l=[]
输出:
1
3
1 2 3
1
1 2
1 2 3
2
2 3
3