2017-02-27 12 views
-2

私はベクトルの最小値を検索する必要があるCでプログラムを実行しようとしていますが、何か間違っています。ベクトルのnumbers1,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

紙と鉛筆を取り、2番目のループで何が起こっているのかを調べると、解決策は明らかになります。 – PiotrNycz

答えて

2

あなたはこれらのみを比較するために、あなたのベクターから2つの要素を選んでいる:

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

ので、その条件をのみ、あなたにこれら二つの最小値を与え、そしてないその配列全体の。

if(vector[i]<min){ 

にあなたの状態を変更し

し、意図したとおりに、あなたのコードが実行されます。

1

まず、変数posicioは初期化されませんでした。したがって、一般的な場合、プログラムには未定義の動作があります。

次に、条件vector[i]<vector[i-1]が真となるように、ベクトルの最後の要素を探しています。そして実際 22、72、123、45、81、このシーケンスのために、このような要素は、あなたが最小の要素を見つける必要がある場合にのみ決定する必要がある場合はypuが

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

を書くべき45

です配列の最小要素の位置、あなたが

int posicio = 0; 

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

を書き込むことができ、ループ外で変数iを宣言しても意味がありません。

ですから、このタスクを実行するヘッダ<algorithm>で宣言された標準アルゴリズムstd::min_elementがあることを考慮してください。この宣言

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

を削除して、例えば

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

を書き込むことができます。

関連する問題