求数组最大的2个数和最小的2个数

ljm19891118 ljm19891118 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
题目要求用2分法求
代码如下 输入10位数数组 10 9 8 7 6 5 4 3 2 1 进行实验
得出最小的2个数是正确的
最大的2个数是错误的
程序看了很多遍了还是找不出答案....
大家帮忙看看 1楼是本代码分割成2部分
也是一样的错误 大家看看

#include<iostream.h>
#define N 10
void daxiao(int i,int j,int &fmin1,int &fmin2,int &fmax1,int &fmax2,int a[])
{

int mid;
int lmin1,lmin2,lmax1,lmax2,rmin1,rmin2,rmax1,rmax2;
if(i==j) fmin1=fmin2=fmax1=fmax2=a[i];
else if (i==j-1)

if(a[i]<a[j])
{
fmin2=fmax1=a[j];
fmin1=fmax2=a[i];
}
else
{
fmin2=fmax1=a[i];
fmin1=fmax2=a[j];
}
else
{
mid=(i+j)/2;
daxiao(i,mid,lmin1,lmin2,lmax1,lmax2,a);
daxiao(mid+1,j,rmin1,rmin2,rmax1,rmax2,a);
if(lmin1<rmin1)
if(lmin2<rmin1)
{
fmin1=lmin1;
fmin2=lmin2;
}
else
{
fmin1=lmin1;
fmin2=rmin1;
}
else
if(rmin2<lmin1)
{
fmin1=rmin1;
fmin2=rmin2;
}
else
{
fmin1=rmin1;
fmin2=lmin1;
}



if(lmax1>rmax1)
if(lmax2>rmax1)
{
fmax1=lmax1;
fmax2=lmax2;
}
else
{
fmax1=lmax1;
fmax2=rmax1;
}
else
if(rmax2>lmax1)
{
fmax1=rmax1;
fmax2=rmax2;
}
else
{
fmax1=rmax1;
fmax2=lmax1;
}
}
}

void main()
{

int a[N],i,fmin1,fmin2,fmax1,fmax2;
i=N;
cout<<"请为数组输入"<<i<<"个整数";
for( i=0;i<N;i++)
cin>>a[i];
fmin1=fmin2=fmax1=fmax2=0;
daxiao(0,N,fmin1,fmin2,fmax1,fmax2,a);
cout<<"第一小的数是:"<<fmin1<<endl
<<"第二小的数是:"<<fmin2<<endl
<<"第一大的数是:"<<fmax1<<endl
<<"第二大的数是:"<<fmax2<<endl;
}
...全文
评论 7
收藏 已收藏
分享
返回顶部
ljm19891118
C++ 语言 65,214 成员 250,514 内容