注册 登录
编程论坛 C++教室

学生党 是一个新学者 编的一个求次大值 次小值的程序 运行时总是出错

小沈SC 发布于 2013-12-18 10:39, 358 次点击
#include<iostream>
using namespace std;

int input(int*max,int*min,int n)
{  int i,x,pmax,pmin;
   cout<<"输入整数的个数:"<<endl;
   cin>>n;
   cout<<"输入"<<n<<"个整数:";
   cin>>x;
   for(i=1,pmax=pmin=x;i<n;i++)
   {  cin>>x;
      if(x>pmax)
      *max=pmax;
      pmax=x;
      if(x<pmin)
      *min=pmin;
      pmin=x;  
   }
   return *max;
}


int main(void)
{ int max,min;
      max=input(&max,&min,10);
  cout<<"十个数的次大值="<<max<<endl
      <<"十个数的次小值="<<min<<endl;
      return 0;
}

[ 本帖最后由 小沈SC 于 2013-12-18 11:22 编辑 ]
1 回复
#2
rjsp2013-12-18 12:09
程序代码:
#include <iostream>
#include <vector>
#include <utility>
#include <cassert>
using namespace std;

void max_min_2nd( const int buf[], size_t n, int& max2nd, int& min2nd )
{
    assert( n >= 2 );

    // 先求前两个数的 最大值,次大值,最小值,次小值
    int max1st_ = std::max( buf[0], buf[1] );
    int max2nd_ = std::min( buf[0], buf[1] );
    int min1st_ = max2nd_;
    int min2nd_ = max1st_;

    for( size_t i=2; i<n; ++i )
    {
        if( buf[i] > max1st_ )
        {
            max2nd_ = max1st_;
            max1st_ = buf[i];
        }
        else if( buf[i] > max2nd_ )
        {
            max2nd_ = buf[i];
        }

        if( buf[i] < min1st_ )
        {
            min2nd_ = min1st_;
            min1st_ = buf[i];
        }
        else if( buf[i] < min2nd_ )
        {
            min2nd_ = buf[i];
        }
    }

    max2nd = max2nd_;
    min2nd = min2nd_;
}

int main(void)
{
    vector<int> buf;
    cout << "输入整数的个数: ";
    size_t n;
    cin >> n;
    buf.resize( n );
    cout << "输入"<<n<<"个整数: ";
    for( size_t i=0; i<n; ++i )
        cin >> buf[i];

    int max2nd, min2nd;
    max_min_2nd( &buf[0], n, max2nd, min2nd );
    cout << "次大值 = " << max2nd << '\n'
         << "次小值 = " << min2nd << endl;

    return 0;
}
1