求 最接近的值 C语言

给一个n个元素的线性表A,对于每个数Ai,找到它之前的数中,和它最接近的数。即对于每个i,计算
Ci = min{|Ai-Aj| | 1<=j<i} 规定C1 = 0。

路过水一贴,O(∩_∩)O。

int i,j,c=0;
for (i = 0; i<n; i++)
{
for (j = 0; j < i; j++)
{
if(abs(a[j]-a[i])<abs(c-a[i]))
{
c = a[i];
}
}
printf("%d\n",c);
}

思路如下。望采纳。

 #include"stdio.h"
#include"stdlib.h" 
#include"windows.h"
#include"time.h"
#include"math.h"
typedef struct biao
{
    int data;//顺序表存储的数据,我就用int型吧。 
    int num;//顺序表的位置;
}biao;


int main(void)
{
    biao *A=NULL;
    int n;
    int c[n];
    c[0]=0;
    scanf("%d",&n);//顺序表长度为 n; 
    A=(biao *)malloc(n *sizeof(biao));

    for(int i=0;i<n;i++)
    {
        A[i].num=i;
    }

    srand(time(0));
    for(int i=0;i<n;i++)
    {
        A[i].data=rand()%50;
    }

    for(int i=0;i<n;i++)
    {
        printf("%d\t",A[i].data);
    }

    printf("\n");
    for(int i=1;i<n;i++)
    {
        int min=abs(A[i].data-A[0].data);
        for(int j=0;j<i;j++)
        {
            if(min>abs(A[i].data-A[j].data))
            {
                min=abs(A[i].data-A[j].data);
            }
        }
         c[i]=min;
         printf("this %d\n",c[i]);
    }


    free(A);
    system("pause");
    for(int i=0;i<n;i++)
    {
        printf("%d\n",c[i]);
    }
    return 0;
}

这个比较简单,做个循环遍历所有元素,对比大小就ok了