搜索最小值

时间:2017-02-27 16:04:32

标签: c++

我试图用C来做一个程序,它必须搜索向量的最小值但是我做错了。使用向量中的数字1,2,3,4,5它可以正常工作,但是当我尝试使用数字:22,72,123,45,81时,它告诉我最小值为45。 / p>

#include <iostream>
using namespace std;
const int MAX= 5;

int main(){
    int vector[MAX], i=0;
    for(i=0;i<MAX;i++){
        cin>>vector[i];
    }
    int min=vector[0], posicio;
    for(i=1;i<MAX;i++){
        if(vector[i]<vector[i-1]){
            min=vector[i];
            posicio= i;
        }
    }
    cout<<min<<"#"<<posicio<<endl;
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您只从矢量中挑选两个元素来比较它们:

 if(vector[i]<vector[i-1]){

因此条件只给出这两个中的最小值,而不是整个数组的值。

将您的条件更改为

 if(vector[i]<min){

,您的代码将按预期运行。

答案 1 :(得分:1)

首先,变量posicio未初始化。因此,在一般情况下,程序具有未定义的行为。

其次,您要找到向量中的最后一个元素,使条件vector[i]<vector[i-1]为真。确实对于这个序列 22,72,123,45,81这样的元素是45。

如果你需要找到ypu应该写的最小元素

int min=vector[0], posicio = 0;
                   ^^^^^^^^^^^
for(i=1;i<MAX;i++){
    if( vector[i] < min ){
    ^^^^^^^^^^^^^^^^^^^^^
        min=vector[i];
        posicio= i;
    }
}

如果只需确定数组最小元素的位置,则可以编写

int posicio = 0;

for ( i = 1; i < MAX; i++ ){
    if( vector[i] < vector[posicio} ){
        posicio = i;
    }
}

在循环外声明变量i是没有意义的。

所以你可以删除这个声明

   int vector[MAX], i=0;
                  ^^^^^

并编写例如

for ( int i = 0;i < MAX; i++ ){
    cin >> vector[i];
}

考虑到标题std::min_element中声明的标准算法<algorithm>执行此任务。