2017-02-27 86 views
-2

我試圖做一個程序與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; 
} 
+0

我猜你的意思是C++?你將它標記爲C++,使用一些C++特性,但你說C. – jready

+0

如果你用C語言編程,你爲什麼要用C++標籤? – curiousguy

+5

拿張紙和鉛筆,並檢查發生在你的第二個循環 - 然後解決方案將是顯而易見的.... – PiotrNycz

回答

2

你只選擇兩個元素從向量比較這些:

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

使病情只給你最小的兩個,而不是整個數組。

更改條件

if(vector[i]<min){ 

,並如預期的代碼運行。

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

要考慮到有在頭<algorithm>執行此任務宣告標準算法std::min_element