首页 > 试题广场 >

等差数列

[编程题]等差数列
  • 热度指数:206 时间限制: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

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int arr[50] = { 0 };
    int i = 0;
    int d = 0;
   // int flag = 0;
    int count = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    //交换顺序,从小到大排序
    i = 0;
    for (i = 0; i < n - 1; i++)
    {
        int j = 0;
        for (j = 0; j < n - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    d = arr[1] - arr[0];
    for (i = 0; i < n-1; i++)
    {
        if (arr[i + 1] - arr[i] == d)
        {
          //  flag = 1;
            count++;
        }
        
    }
    if (count==n-1)
        printf("Possible\n");
    else
        printf("Impossible\n");
    return 0;
}
发表于 2022-08-19 15:33:16 回复(0)
if __name__=='__main__':
    n=int(input())
    li=[int(i) for i in input().split(' ')]
    if len(li)<=2:
        print('Possible')
    li=sorted(li)
    t=li[1]-li[0]
    flag=0
    for i in range(len(li)-1):
        if(li[i+1]-li[i])!=t:
            flag=1
            break
    if flag==0:print('Possible')
    else:print('Impossible')

发表于 2022-08-15 17:21:27 回复(0)