搜索最小值

Searching the minimum value

本文关键字:最小值 搜索      更新时间:2023-10-16

我正在尝试使用C执行一个程序,该程序必须搜索向量的最小值,但我做错了什么。使用数字为1,2,3,4,5在矢量中,它可以正常工作,但是当我尝试使用数字时:22、72、123、45、81,它对我说,最低的一个是45。<<<<<<<<<<

#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;
}

您仅从矢量中选择两个元素来比较以下内容:

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

因此,这种条件仅给您至少这两个,而不是整个数组的条件。

将您的病情更改为

 if(vector[i]<min){

您的代码将按预期运行。

首先没有初始化变量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>中声明。