2017-09-24 2 views
1

私は最後にこのコードを完成させましたが、1つの問題があります。出力 "Positions:"に対して、最小値が出現するすべての位置を出力します。しかし、私のコードは、ランダムに生成された各配列(サイズ20)の最小値の最後の位置のみを出力します。最小限になる複数の位置を出力しながら、このプログラムをどのように冗長性の少ないものにすることができるかを教えてください。ありがとうございました!私のコードで "position:"をより正確にするにはどうすればよいですか?

#include <iostream> 
#include <iomanip> 
using namespace std; 

double random(unsigned int &seed); 
unsigned int seed = (unsigned int)time(0); 
const int SIZE = 20; 

void print_array (int a[]); 
void fill_array (int a []); 
int find_min (int [], int); 

int main() 
{ 
    int arr[SIZE]; 
    cout << "Arrays: \n"; 
    fill_array(arr); 
    print_array(arr); 

    int pos = find_min(arr, SIZE); 
    int minimum = arr[pos]; 

    cout << "Min is: " << minimum << endl; 
    cout << "At position: " << pos +1 << endl; 

    return 0; 
    } 

double random(unsigned int &seed) 
{ 
    const int MODULUS = 15749; 
    const int MULTIPLIER = 69069; 
    const int INCREMENT = 1; 
    seed = ((MULTIPLIER*seed)+INCREMENT)%MODULUS; 
    return double(seed)/MODULUS; 
    } 

void fill_array (int a []) 
{ 
    for (int i = 0; i < SIZE; ++i) 
     a[i] = 0 + (10 * (random(seed))); 
} 

int find_min (int arr[], int n) 
{ 
    int min = arr[0]; 
    int index = 0; 

    for (int i = 1; i < n; ++i) 
    if (arr[i] < min) 
    { 
     index = i; 
     min = arr[i]; 
    } 
    return index; 
} 

void print_array (int a[]) 
{ 
    for (int i = 0; i <SIZE; ++i) 
     cout << setw(3) << a[i]; 
cout << endl; 
} 
+1

あなたが何を求めているのかわかりません。 [ask]の質問をお読みください –

+0

オペレータは配列内を再度見て、最小値を見つけて、その値を含むすべてのインデックスを出力します。 – drescherjm

+0

こんにちは、私の質問は次のとおりです。このプログラムでは、find_min関数を編集して位置を出力することができます(最小値が発生する位置の1つの位置(最後の位置)ではなく)。配列は次のとおりです。配列:0 1 8 0 8 8 2 1 1 9 4 1 4 1 9 8 5 4 2 3 最小値:0 ポジション:1 -----これはポジション出力を必要とする場所です次のようになります:1、4 –

答えて

0

mainを変更して目標を達成できます。しかし、多くの書式設定オプションがあります

cout << "Min is at: " 
for (int i = pos; i < SIZE; i++) { 
     if (arr[i] == minimum) { 

      if (i != pos) cout << ", "; 

      cout << i+1 << endl; 


     } 

} 

- あなたは次のコードのような何かを行うことができます1行で印刷するために:以下のコード

int main() 
{ 
    int arr[SIZE]; 
    cout << "Arrays: \n"; 
    fill_array(arr); 
    print_array(arr); 

    int pos = find_min(arr, SIZE); 
    int minimum = arr[pos]; 

    //The following loop traverses through the array and prints the position when array element is equals to minimum 
    for (int i = pos; i < SIZE; i++) { 
    if (arr[i] == minimum) 
     cout << "Min is at: " << i+1 << endl;  
    } 

    cout << "Min is: " << minimum << endl; 
    cout << "At position: " << pos +1 << endl; 

    return 0; 
} 

EDITEDを参照してください。それらのいずれかを使用することができます。

+0

ありがとうございました!私はforループを試そうとしていましたが、if(arr [i] == minimum)という条件を使用するのを躊躇していました。もう一度ありがとう!大きな問題ではありませんが、私は "Min is at:"を1行のリストとしてどのように出力するのでしょうか?例えば: –

+0

の代わりに "Min is at:2、6、9"です。私は逃しました。考えてくれてありがとう。編集されました。 –

+0

@peso出力を1行に表示しますか? –

関連する問題