等差数列

前言

NWAFU 阶段2考试题目1 Content1102 BH


一、题目描述

题目描述

输入不少于3个元素的任意整数序列,判断该整数序列是否可以组成递增等差数列。请完成判断函数judge()。
函数原型: int judge(int a[], int n, int *cd);
函数说明: a为输入整数序列,n为该序列的元素个数,*cd为公差。若序列中元素个数n<3,函数返回-1;若该序列不能组成等差数列,则返回1;否则函数返回0,同时*cd中为递增等差数列的公差。
如输入序列为1,3,2,4,7,6,5,8,9,则可以构成公差为1的等差数列。

二、设计步骤

可以先整理读入的数列,用排序函数使其从小到大排列,而后用循环逐两项求差验证是否满足等差数列特征。

#include
#include
#define _CRT_SECURE_NO_WORNINGS
#define len 101

int judge(int a[], int n, int *cd);          //判断函数
void BubbleSort(int a[],int n);              //冒泡排序万岁
int main(void)                               //主函数(用于测试)
{
    int *Arr,i = 1;                          //Arr存放整数序列,i用于测试序列长度
    int d;                                   //存放数列公差
    char ch;                                 //单纯为了读入整数序列
    Arr = (int *)malloc(len * sizeof(int));
    scanf("%d",Arr);

    ch = getchar();                          //用while((scanf("%d",&Arr[i])) != 0)也可
    while(ch != '\n'){
        scanf("%d",Arr+i);
        i++;
        ch = getchar();
    }
    printf("%d ",judge(Arr,i,&d));
    printf("%d\n",d);
    free(Arr);                               //切莫忘嘹
    return 0;
}

int judge(int a[], int n, int *cd)           //正片开始
{
    int i,ret;                               //i循环变量,ret为返回值
    if(n < 3)                                //长度小于3
        ret = -1;
    else{
        ret = 0;
        BubbleSort(a,n);                     //先用冒泡排序整理序列,使从小到大排列

        *cd = a[1] - a[0];                   //得到一个前后项差值
        for(i = 0;i < n-1;i++){              //循环测试数列是否满足公差为*cd
            if((a[i+1] - a[i]) != *cd){ 
                ret = 1;
                break;
            }
        }
    }
    return ret;
}

void BubbleSort(int a[],int n)               //冒泡
{
    int i,j,temp;
    for(i = 0;i < n - 1;i++){
        for(j = 0;j < n - i - 1;j++){
            if(a[j] > a[j+1]){
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
}

小白的原始思路,有佬的修改意见请指导! 


总结

EOF

你可能感兴趣的:(c语言,学习方法)