题解

难度:简单

知识点:排序 数学逻辑

思路:

1.首先将n个元素存放在动态数组x中,对其进行从小到大排序。

2.通过x[1]-x[0]计算出d,采用for循环判断动态数组中两个相邻的数的差x[i]-x[i-1]与d是否相同:若不相等即不能构成等差数列,无需对之后的数进行判断,提前退出循环。

3.怎么判断是否提前退出循环?
定义flat变量,在进入循环之前赋值为1,在循环过程中,若出现x[i]-x[i-1]与d不相等,将flat赋值为0,然后通过break退出循环。

4.在循环之后,判断flat值,若为1输出:Possible,若为0输出:Impossible。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
    vector<int> x;
    int n,a;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a;
        x.push_back(a);
    }
    sort(x.begin(),x.end());
    int d=x[1]-x[0];
    int flat=1;
    for(int i=2;i<n;i++){
        if(x[i]-x[i-1]!=d) {
            flat=0;
            break;
        }
    } 
    if(flat) cout<<"Possible"<<endl;
    else cout<<"Impossible"<<endl;
    return 0;
}