题目

已知一个包含 n 个整数的非降序有序数组,再输入一个整数 x,将 x 插入到数组中合适的位置,使插入后的新数组依然保持有序。

输入格式:第一行输入原数组大小 n;第二行输入 n 个升序整数;第三行输入待插入的整数 x。

输出格式:在一行中输出插入新元素后的完整数组,元素以空格分隔,末尾换行。

数据范围与约定:0 ≤ n ≤ 500。

思路与算法

1. 二分查找插入点
Python 标准库 bisect.bisect_left(a, x) 可以在对数时间 O(log n) 内找到正确插入位置。

2. 列表原地插入
通过 a.insert(idx, x) 插入元素,保持列表有序性。

完整程序

# 遍历 1~999 判断各位乘积与各位和是否相等
for i in range(1, 1000):
    prod = 1
    s = 0
    x = i
    while x > 0:
        d = x % 10
        prod *= d
        s += d
        x //= 10
    if prod == s:
        print(i)

运行示例

输入:

3
1 3 5
2

输出:

1 2 3 5