求数组最大的2个数和最小的2个数
题目要求用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;
}
代码如下 输入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;
}
...全文
相关推荐
java 求最大值、最小值和平均值
java 求最大值、最小值和平均值 java 求最大值、最小值和平均值
求n个数的最大公约数
用C++实现,先求两个数的最大公约数,然后递归。
C#实现输入10个数存入到数组中并求max和min及平均数的方法示例
主要介绍了C#实现输入10个数存入到数组中并求max和min及平均数的方法,涉及C#简单数据转换与数值运算相关操作技巧,需要的朋友可以参考下
java代码-定义一个一维数组,求出数组的最大值,最小值,平均值
java代码-定义一个一维数组,求出数组的最大值,最小值,平均值
求数组最大值,最小值,平均值,排序,寻找指定数据.rar————求数组最大值,最小值,平均值,排序,寻找指定数据
新手比较友好型


