C语言的qsort使用方式

题目:
如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。
小易现在有一个长度为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\n");
                break;
            }
        }
        if(i==n) printf("Possible\n");
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/heyour/p/12458393.html