如何运用指针数组求某段区间中数值的最小值?
已知某数组a,假设其符合某条件的指针数组是**nn,求指针数组元素*(nn+i)与*(nn+i+1)所指向的数组a的元素值**(nn+i)与**(nn+i+1)之间的最小的元素值。
#include<iostream.h>
#include<stdlib.h>
int a[30]={2,0,6,23,1,3,41,0,5,6,0,99,11,21,4,33,22,0,12,7,5,9,1,8,67,0,9,3,6,23};
int *p,i,j=0,**nn,**dd;
int **y,*bb;
int k=0;
int r,f,g=0;
int main()
{
y = (int **)calloc(30,sizeof(int *));
nn=(int **)calloc(30,sizeof(int*));
dd=(int **)calloc(30,sizeof(int*));
bb=(int *)calloc(1,sizeof(int));
p=&a[0];
for(i=0;i<20;i++)
{
if(*(p+i)!=0)
{
*(y+j)=p+i;
cout<<**(y+j)<<" ";
j++;
}
}
cout<<"\n";//数组a非0元素的指针数组**y,元素j
for(i=0;i<j-2;i++)
{
if((**(y+i)*3)>**(y+i+2))
{
*(nn+k)=*(y+i);
cout<<**(nn+k)<<" ";
k++;
}
}
cout<<"\n"; //符合条件**(y+i)*3)>**(y+i+2)的新指针数组
//求指针数组**nn中2相邻元素指向的数组a的相对应元素间非0的最小值,并以数组表示。
for(i=0;i<k-1;i++)
{
for(r=0;r<j-1;r++)
{
if(*(nn+i)<=*(y+r) && *(y+r)<=*(nn+i+1))
{
*bb=**(y+r)<**(y+r+1)?**(y+r):**(y+r+1);
cout<<*bb<<endl;
}
}
for(r=0;r<j;r++)
{
if(**(y+r)==*bb && *(nn+i)<=*(y+r))
{
*(dd+g)=*(y+r);
g++;break;
}
}
}
cout<<**(dd+g)<<" ";
cout<<endl;
return 0;
}
请问上面红色的这段程序应如何改写?
[ 本帖最后由 yxb0001 于 2009-9-29 23:22 编辑 ]