数据序列对称问题,给定一个数组,判断其中的数据序列是否左右对称:偶数个数时,左右两半部分正好逆序;奇数时,除中间位置数外,左右逆序。 Input Description 第一行N表示一共有N个测试用例,也即接下来的输入数据共有N行。 接下来的每一行表示一个输入数组,第一个数字n表示该数组的元素个数,后面紧跟着n个数,中间都以空格隔开。 Output Description 是逆序输出YES,否则输出NO(注意都是大写,小写判错) Sample Input 3 5 1 2 3 2 1 4 1 1 1 2 6 2 1 2 2 1 2 Sample Output YES NO YES
时间: 2024-03-09 12:46:08 浏览: 96
以下是 Python 代码实现:
```python
n = int(input())
for i in range(n):
arr = list(map(int, input().split()))[1:]
if len(arr) % 2 == 0:
left = arr[:len(arr)//2]
right = arr[len(arr)//2:][::-1]
else:
left = arr[:len(arr)//2]
right = arr[len(arr)//2+1:][::-1]
if left == right:
print("YES")
else:
print("NO")
```
解释一下:
首先读入测试用例数量 `n`,然后循环读入每个测试用例。对于每个测试用例,先读入数组元素个数 `n`,然后读入 `n` 个数字,存入列表 `arr` 中。接下来根据数组元素个数的奇偶性,将数组划分为左右两部分,分别保存在 `left` 和 `right` 中。对于偶数个元素的数组,直接将数组一分为二,左边部分是原数组的前一半,右边部分是原数组的后一半的逆序;对于奇数个元素的数组,中间的元素不需要考虑,左边部分是原数组的前一半,右边部分是原数组的后一半的逆序(不包括中间元素)。最后比较左右两部分是否相等,相等则输出 `YES`,否则输出 `NO`。
相关问题
给定一个数组,判断其中的数据序列是否左右对称:偶数个数时,左右两半部分正好逆序;奇数时,除中间位置数外,左右逆序
以下是Python实现的代码:
```python
def is_symmetric(arr):
n = len(arr)
if n % 2 == 0:
return arr[:n//2] == arr[n//2:][::-1]
else:
return arr[:n//2] == arr[n//2+1:][::-1]
arr = [1, 2, 3, 4, 3, 2, 1]
print(is_symmetric(arr)) # True
arr = [1, 2, 3, 4, 2, 1]
print(is_symmetric(arr)) # True
arr = [1, 2, 3, 4, 5]
print(is_symmetric(arr)) # False
```
代码中首先判断数组的长度是奇数还是偶数,然后分别进行比较。对于偶数的情况,将数组分为左右两半,判断左半部分是否等于右半部分的逆序即可;对于奇数的情况,将数组分为左右两半,去掉中间那个数,再判断左半部分是否等于右半部分的逆序即可。
给定一个数组,判断其中的数据序列是否左右对称:偶数个数时,左右两半部分正好逆序;奇数时,除中间位置数外,左右逆序。python
可以先将数组分成左右两半,再判断左半部分是否和右半部分逆序。
以下是Python代码实现:
```python
def is_symmetric(arr):
n = len(arr)
mid = n // 2
left = arr[:mid]
right = arr[mid+1:] if n % 2 == 0 else arr[mid+1:]
return left == right[::-1]
# 测试
arr1 = [1, 2, 3, 3, 2, 1] # True
arr2 = [1, 2, 3, 4, 3, 2, 1] # True
arr3 = [1, 2, 3, 4, 5, 6] # False
print(is_symmetric(arr1))
print(is_symmetric(arr2))
print(is_symmetric(arr3))
```
输出结果:
```
True
True
False
```
阅读全文