Advertisement

等差数列

阅读量:

注:主要改动说明

输入由两部分组成,第一行为整数n,表示数列的长度(其中2 ≤ n ≤ 50)。第二行为x[1]至x[n],表示每个位置上的数值(其中每个数值满足条件: 0 ≤ x[i] ≤ 1000)。

输出描述:

如果可以变成等差数列输出”Possible”,否则输出”Impossible”。
示例1
输入

3
3 1 2
输出

Possible

首先执行排序操作,并随后进行等差数列的判断。(自己编写的快速排序算法被用来进行排序操作,并且仅正确率80%,运行效率较低。随后调用sort函数以加快速度,并因此感到些许沮丧。)

复制代码
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    bool judgeList (int list[] , int num);
    void quickSort(int list[] , int r , int l);
    
    int main(){
    int num;
    
    cin>>num;
    
    int list[num];
    
    for(int i = 0 ; i < num ; i++){
        cin>>list[i];
    }
    
    //quickSort(list , 0 , num-1);
    sort(list,list+num);
    if(judgeList(list , num)){
        cout<<"Possible";
    }else{
        cout<<"Impossible";
    }
    
    return 0;
    
    }
    
    void quickSort(int list[] , int r , int l){
    if (r < l){
        int i = r , j = l , x= list[r] ,z;
    
        while(i<j){
            while(i<j && list[i]<x)
                i++;
    
            z = list[i];
    
            while(i<j && list[j]>x)
                j--;
    
            list[i] = list[j];
            list[j] = z;        
        }
        quickSort(list , r , i-1);
        quickSort(list , i+1 ,l);
    }
    }
    
    bool judgeList (int list[] , int num){
    if(num <= 1) return true;
    
    int d = list[1] - list[0];
    
    for(int i=1 ; i<num ;i++){
        if(list[i] != list[i-1] + d){
            return false;
        }
    }
    
    return true;
    }

全部评论 (0)

还没有任何评论哟~