打印给定数组的所有子数组

问题描述 投票:0回答:6

给定一个数组,编写一个算法来打印所有可能的子数组。输入的第一行包含一个整数 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

我已经尽力了。

python list
6个回答
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

1
投票

您可以通过像这样的简单而通用的方式来代替您所做的事情:

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

0
投票

尝试以下操作:

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()

0
投票

(试试这个)您可以通过下一个获取并打印数组的所有子集:

在数组 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

下面的函数返回向量 A 的子集。

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))

--> 因为在每一步我们都有两个选择:包含或忽略。


0
投票

具有列表理解:

[a[i:j+1] for i in range(len(a)) for j in range(len(a)) if j>= i]

-1
投票

代码是用基本语法给出的答案的另一个版本

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
© www.soinside.com 2019 - 2024. All rights reserved.