给一个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了