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

ljm19891118 2009-11-25 08:08:15
题目要求用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;
}
...全文
89 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljm19891118 2009-11-25
  • 打赏
  • 举报
回复
我用的是vc++6.0
建立cpp写的
ljm19891118 2009-11-25
  • 打赏
  • 举报
回复
为什么我执行的时候
结果是这
请为数组输入10个整数10 9 8 7 6 5 4 3 2 1
第一小的数是:0
第二小的数是:1
第一大的数是:1245120
第二大的数是:10
ljm19891118 2009-11-25
  • 打赏
  • 举报
回复
我去试试
谢谢了
太乙 2009-11-25
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
#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;
}
}
}

int 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;
return 0;
}
太乙 2009-11-25
  • 打赏
  • 举报
回复

使用lz的代码:


[root@localhost study]# g++ test.cpp
[root@localhost study]# ./a.out
请为数组输入10个整数10 9 8 7 6 5 4 3 2 1
第一小的数是:0
第二小的数是:1
第一大的数是:10
第二大的数是:9








ljm19891118 2009-11-25
  • 打赏
  • 举报
回复
在线等待....
ljm19891118 2009-11-25
  • 打赏
  • 举报
回复
#include<iostream.h>
#define N 10
void xiao(int i,int j,int &fmin1,int &fmin2,int a[])
{

int mid;
int lmin1,lmin2,rmin1,rmin2;
if(i==j) fmin1=fmin2=a[i];
else if (i==j-1)

if(a[i]<a[j])
{
fmin2=a[j];
fmin1=a[i];
}
else
{
fmin2=a[i];
fmin1=a[j];
}
else
{
mid=(i+j)/2;
xiao(i,mid,lmin1,lmin2,a);
xiao(mid+1,j,rmin1,rmin2,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;
}

}


}


void da(int i,int j,int &fmax1,int &fmax2,int a[])
{
int mid;
int lmax1,lmax2,rmax1,rmax2;
if(i==j) fmax1=fmax2=a[i];
else if (i==j-1)

if(a[i]<a[j])
{
fmax1=a[j];
fmax2=a[i];
}
else
{
fmax1=a[i];
fmax2=a[j];
}
else
{
mid=(i+j)/2;
da(i,mid,lmax1,lmax2,a);
da(mid+1,j,rmax1,rmax2,a);
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;

da(0,N,fmax1,fmax2,a);
xiao(0,N,fmin1,fmin2,a);
cout<<"第一小的数是:"<<fmin1<<endl
<<"第二小的数是:"<<fmin2<<endl
<<"第一大的数是:"<<fmax1<<endl
<<"第二大的数是:"<<fmax2<<endl;
}

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧