首页 > 试题广场 >

序列交换

[编程题]序列交换
  • 热度指数:1874 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小易给你一个包含n个数字的数组。你可以对这个数组执行任意次以下交换操作:
对于数组中的两个下标i,j(1<=i,j<=n),如果为奇数,就可以交换a_ia_j

现在允许你使用操作次数不限,小易希望你能求出在所有能通过若干次操作可以得到的数组中,字典序最小的一个是什么。

输入描述:
第一行一个整数n;
第二行n个整数a_1,a_2,..,a_n,表示数组,每两个数字之间用一个空格分隔。
输入保证


输出描述:
n个整数,每两个整数之间用一个空格分隔,表示得到的字典序最小的数组。
示例1

输入

4
7 3 5 1

输出

7 3 5 1
示例2

输入

10
53941 38641 31525 75864 29026 12199 83522 58200 64784 80987

输出

12199 29026 31525 38641 53941 58200 64784 75864 80987 83522
全是奇数:返回原数组
全是偶数:返回原数组
否则:排序后输出
def sort_f(alist):
    odd ,even = 0,0
    for i in alist:
        if i%2 == 0:
            odd+=1
        else:
            even+=1
        if odd != 0 and even != 0:# 有奇数有偶数,直接排序
            return sorted(alist)
    return alist

n = int(input())
b = list(map(int,input().split()))
for i in sort_f(b):
    print(i,end=' ')


编辑于 2020-08-15 15:42:23 回复(0)
n = int(input())
data = [int(a) for a in input().split()]
for i in range(0,n):
    if data[i]%2 == 0:
        for j in range(i+1,n):
            if data[j]%2 != 0:
                data.sort()
    else:
        for j in range(i+1,n):
            if data[j]%2 == 0:
                data.sort()
    print(data[i],end=" ")

发表于 2020-08-08 11:00:10 回复(0)