2 ljiechang ljiechang 于 2014.11.23 23:53 提问

求 最接近的值 C语言 2C

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

4个回答

fmoalm
fmoalm   2015.11.30 15:10

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

you871649946
you871649946   2015.12.17 17:56

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);
}

wang_huizhang
wang_huizhang   2016.07.08 11:12

思路如下。望采纳。

 #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;
}
richardgorge
richardgorge   2017.12.20 10:19

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!