📌  相关文章
📜  国际空间研究组织 | ISRO CS 2018 |问题 35(1)

📅  最后修改于: 2023-12-03 15:37:15.942000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2018 |问题 35

这是ISRO CS 2018编程考试中的第35个问题,题目如下:

给定一个数组A 由n个整数组成,数组未排序。 从元素a [0]开始,您必须执行以下操作:

  1. 如果a [i]为奇数,则a [i] = a [i] - a [i + 1]

  2. 如果a [i]为偶数,则a [i] = a [i] + a [i + 1]

您需要执行这些操作,直到a [i]和a [i + 1]都大于或等于n。

您的任务是找到进行操作的次数。

输入描述:

第一行包含单个整数T,表示测试用例的数量。每个测试用例的第一行包含一个整数n,表示数组的大小。每个测试用例的第二行包含n个以空格分隔的整数。

输出描述:

对于每个测试用例,在新行中,打印要执行的操作次数。

示例:

输入:

2
6
9 7 5 3 1 8
4
1 3 5 7

输出:

4
0
解题思路

这道题目的思路很简单,就是模拟题意中的操作过程,直到不能再进行操作。但是需要注意几点:

  1. 当数组中的所有元素都为偶数或奇数时,不能再进行操作。

  2. 注意数组越界问题。

  3. 判断奇偶可以使用 x & 1 == 1 或者 x % 2 == 1 等方式。

代码如下:

def solve(n, a):
    cnt = 0
    for i in range(n-1):
        if a[i] >= n or a[i+1] >= n:
            break
        if i % 2 == 0:
            if a[i] & 1 == 1:
                a[i] -= a[i+1]
                cnt += 1
            if a[i+1] & 1 == 1:
                a[i+1] -= a[i+2]
                cnt += 1
        else:
            if a[i] % 2 == 0:
                a[i] += a[i+1]
                cnt += 1
            if a[i+1] % 2 == 0:
                a[i+1] += a[i+2]
                cnt += 1
    return cnt

t = int(input())
for _ in range(t):
    n = int(input())
    a = list(map(int, input().split()))
    print(solve(n, a))

该代码的时间复杂度为O(n),可以通过此题。