首页 > 试题广场 >

等差数列

[编程题]等差数列
  • 热度指数:228 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。
小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列

输入描述:
输入包括两行,第一行包含整数n(2 ≤ n ≤ 50),即数列的长度。
第二行n个元素x[i](0 ≤ x[i] ≤ 1000),即数列中的每个整数。


输出描述:
如果可以变成等差数列输出"Possible",否则输出"Impossible"。
示例1

输入

3
3 1 2

输出

Possible
a
发表于 2021-10-22 17:38:29 回复(0)
n = input()
n = int(n)
lst = sorted(map(int,input().split()))
cha = lst[1]-lst[0]
boo = True
for i in range(1,n-1):
    if cha!=lst[i+1]-lst[i]:
        print("Impossible")
        boo = False
        break
if boo:
    print("Possible")
发表于 2018-12-27 09:25:34 回复(0)
import sys
if __name__ == "__main__":
    n = int(sys.stdin.readline())
    line = sys.stdin.readline().strip()
    array = list(map(int, line.split()))
    # 差值为0的情况
    if len(set(array)) == 1:
        print("Possible")
    # 差值不为0,则数列不可能出现数值相等的情况
    elif len(array) != len(set(array)):
        print("Impossible")
    else:  # 数列排序
        array_r = sorted(array)
        # 构造标准等差数列
        d = array_r[1] - array_r[0]
        n = len(array)
        array_new = [array_r[0] + i*d for i in range(n)]
        # 两数列比较,没有差异项则为等差数列
        if len(list(set(array_new).difference(set(array_r))))>0:
            print("Impossible")
        else:
            print("Possible")

发表于 2018-08-08 22:57:28 回复(0)