c++等差数列问题。

题目描述:
等差数列是指从第二项起,每一项与它的前一项的差等于同一个常数的一种数列。输入n个数,判断这n个数是否可以组成等差数列,如果不可以输出NO,可以输出YES。
输入格式:
第一行一个整数n,接下去n个整数
输出格式:
YES或者NO
样例输入1:
5
10 9 7 6 8
样例输出1YES
样例解释:
n<=1000

#include<stdio.h>
#include<stdlib.h>
void BubbleSort(int*c, int n)
{
    for (int i = 0; i < n - 1; ++i)
    {
        int flag = 1;
        for (int j = 1; j < n - i; ++j)
        {
            if (c[j - 1]> c[j])
            {
                int ret = c[j - 1];
                c[j - 1] = c[j];
                c[j] = ret;
                flag = 0;
            }
        }
        if (flag)//未交换直接返回
            return;
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    int *a = (int*)malloc(sizeof(int)*n);
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    BubbleSort(a, n);
    int d = a[1] - a[0];
    for (int i = 0; i < n-1; i++)
    {
        if (a[i + 1] - a[i] != d)
        {
            printf("NO");
            return 0;
        }
    }
    printf("YES");
}

C++版本:

#include <iostream>
using namespace std;

int comp(int n, int*p)
{
    int t;
    for (int i = 0; i < n-1; i++){
        for (int j = 1; j < n-i; j++){
            if (*(p+j-1) > *(p+j)){
                t = *(p+j-1);
                *(p+j-1) = *(p+j);
                *(p+j) = t;
            }
        }
    }
    for (int i = 2; i < n-1; i++){
        if (*(p+i+1) + *(p+i-1) != *(p+i) * 2){
            return false;
        }
    }
    return true;
}

int main()
{
    int n;
    cin >> n;

    int *p = new int[n];
    
    for (int i = 0; i < n; i++){
        cin >> *(p+i);
    }
        
    if (comp(n,p))
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
    
    delete []p;
    return 0;
}