C语言二分问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 19:40:49
int a[10]={10,7,6,4,2,3,5,1,9,8};
main()
{
int max,min;
int f(int l,int r,int *max,int *min);
f(1,9,&max,&min);
printf("max %d min %d",max,min);
getchar();

}
int f(int l,int r,int *max,int *min)
{
int rmax,lmax,rmin,lmin,z;
if(l==r)
{
if(a[l]>a[r])
{
*max=a[l];
*min=a[r];
}
else
{
*max=a[r];
*min=a[l];
}
}
else
{
z=r/2;
f(1,z,&lmax,&lmin);
f(z+1,r,&rmax,&rmin);
if(lmax>rmax) *max=lmax;
else *max=rmax;
if(lmin>rmin)
*min=rmin;
else *min=lmin;

}

}
依照二分原理来解决问题的有什么问题?
我的编译器运行不出正确结果;

帮你改了一下,编译可以通过,但是不知道你的max和min的值所以没结果,你可以自己指定。
#include<stdio.h>
#include<string.h>
void f(int ,int ,int *,int *);
int a[10]={10,7,6,4,2,3,5,1,9,8};
void main()
{
int max,min;

f(1,9,&max,&min);
printf("max %d min %d",max,min);
getchar();

}
void f(int l,int r,int *max,int *min)
{
int rmax,lmax,rmin,lmin,z;
if(l==r)
{
if(a[l]>a[r])
{
*max=a[l];
*min=a[r];
}
else
{
*max=a[r];
*min=a[l];
}
}
else
{
z=r/2;
f(1,z,&lmax,&lmin);
f(z+1,r,&rmax,&rmin);
if(lmax>rmax) *max=lmax;
else *max=rmax;
if(lmin>rmin)
*min=rmin;
else *min=lmin;