📜  门| GATE 2017 MOCK II |问题 6(1)

📅  最后修改于: 2023-12-03 14:58:17.931000             🧑  作者: Mango

门| GATE 2017 MOCK II |问题 6

本题需要编程,目的是为了找出一个数组的全排列,并计算排列中有多少个元素的相邻差异的绝对值等于1。

输入

输入包含两行,第一行是一个整数,表示数组的长度N(2 <= N <= 20),第二行是N个空格分隔的整数,表示数组中的元素A1, A2, ..., AN。

输出

输出一个整数代表 上述条件的 元素数量。

样例

例如:

输入:

3
1 2 1

输出:

2

详见:https://www.geeksforgeeks.org/printed-permutations-string-duplicates-allowed/

实现思路
  1. 根据输入的N获取数组的长度。
  2. 将输入的第二行分解成数组。
  3. 调用permutations函数生成全排列。
  4. 迭代排列数组,判断两个相邻的元素绝对差值是否为1,如果是,则需要增加计数器。最终计数器的值即为符合条件的元素数量。
代码示例
from itertools import permutations

def count_pairs(arr):
    pairs_count = 0
    for i in range(1, len(arr)):
        if abs(arr[i] - arr[i-1]) == 1:
            pairs_count += 1
    return pairs_count

N = int(input())
A = list(map(int, input().split()))

permutations_list = list(permutations(A))

answer = 0
for permutation in permutations_list:
    answer += count_pairs(permutation)
print(answer)

该代码片段为python的实现,基于题目描述,我们可以使用python内置的itertools.permutations函数来生成全排列,之后再迭代排列数组进行比较即可。