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

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

门| GATE 2017 MOCK II |问题26

这是一道来自GATE 2017 MOCK II的编程题,要求编写一个程序,实现以下功能:

  • 读取一个整数n,表示接下来将输入n个整数。
  • 读取n个整数,将它们保存在一个整数数组中。
  • 对初始数组进行改变,使得数组中所有奇数在前面,所有偶数在后面,并且奇数之间的相对顺序和偶数之间的相对顺序不变。
  • 输出变换后的数组。

这道题比较简单,只需要用两个指针分别从数组的首尾向中间扫描,遇到奇数就放在左边,遇到偶数就放在右边,直到指针相遇为止。

以下是Python的实现代码:

def rearrange(arr, n):
    i, j = 0, n-1
    while i < j:
        while i < j and arr[i] % 2 == 1:
            i += 1
        while i < j and arr[j] % 2 == 0:
            j -= 1
        if i < j:
            arr[i], arr[j] = arr[j], arr[i]
    return arr

n = int(input())
arr = [int(x) for x in input().split()]
arr = rearrange(arr, n)
print(*arr)

我们首先定义了一个函数rearrange,它的参数是一个整数数组arr和数组的长度n。函数内部定义了两个指针i和j,分别指向数组的头和尾。

当i小于j时,循环执行以下操作:

  • 从左往右找到第一个偶数arr[i],停止时i指向它。
  • 从右往左找到第一个奇数arr[j],停止时j指向它。
  • 如果i<j,说明此时i指向一个偶数,j指向一个奇数,我们就交换arr[i]和arr[j]。

重复以上步骤直到i等于j为止,此时数组就被改变了。

在主程序中,我们先读入n和数组arr,然后调用rearrange函数对arr进行操作,最后输出变换后的数组。

使用方法:将以上代码拷贝到一个Python文件中,运行即可。