题目:
如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。
小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列
小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列
代码:
#include <cstdio> #include <cstring> #include <cstdlib> /* 通过这个题,记住调用C语言的排序函数的方式,尤其是cmp函数的写法 */ int cmp(const void* a, const void* b){ return (*(int*)a - *(int*)b); } int main(){ int i, n, t, a[55]; while(scanf("%d", &n) != EOF){ memset(a, 0, sizeof(a)); for(i=0; i<n; i++) scanf("%d", &a[i]); qsort(a, n, sizeof(int), cmp); t = a[1] - a[0]; for(i=1; i<n; i++){ if(i+1<n && a[i+1]-a[i]!=t){ printf("Impossible "); break; } } if(i==n) printf("Possible "); } return 0; }