题解
难度:简单
知识点:排序 数学逻辑
思路:
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; }