2013-03-31 49 views
1

我正在嘗試編寫一個簡單的邏輯程序來查找已完成的最高和最低值。問題是如何找到索引位置是什麼時候找到最高和最低值。見附圖。 enter image description here簡單數組查找索引位置的最高和最低值

#include <iostream> 

using namespace std; 


int main() 
{ 

int number=0, min=0, max=0; 
int *rangeOfNumbers = new int[]; 

cout<<"Enter 5 numbers: "; 

for(int i=0; i<5;i++) 
{ 
    cout<<"Enter number "<<i+1<<": "; 
    cin>>rangeOfNumbers[i]; 
} 

//max min array positions 

min=rangeOfNumbers[0]; 
max=rangeOfNumbers[0]; 

//find max and mins 
for(int j=0; j<5;j++) 
{ 
if(max<rangeOfNumbers[j]) 
{ 
    max=rangeOfNumbers[j]; 
} 
else if(min>rangeOfNumbers[j]) 
{ 
    min=rangeOfNumbers[j]; 
} 
} 

cout<<"\n\nMin number: "<<min; 
cout<<"\nMax number: "<<max; 

cin.get(); 
cin.get(); 

return 0; 
} 

回答

4

除了更新最小和最大,也保留一個索引變量並進行更新。

//max min array positions 

min=rangeOfNumbers[0]; 
max=rangeOfNumbers[0]; 
int minindex = 0; 
int maxindex = 0; 

//find max and mins 
for(int j=0; j<5;j++) 
{ 
    if(max<rangeOfNumbers[j]) 
    { 
    max=rangeOfNumbers[j]; 
    maxindex = j; 
    } 
    if(min>rangeOfNumbers[j]) 
    { 
    min=rangeOfNumbers[j]; 
    minindex = j; 
    } 
} 

maxindex += 1; 
minindex += 1; 
+0

索引不會改變,並且不會顯示正確的位置。它每次出現1和3。 – Klinetel

+0

對不起 - 編輯minindex和maxindex從0開始。 – maditya

+0

此外,它顯示爲1和3,因爲數組索引從0開始(即第一個元素爲0)。我已編輯將1添加到索引,以便您得到「正確」的答案。 – maditya

1

變化maxminindexOfMaxindexOfMin,因爲通過存儲最大可以同時訪問最大索引和最大值的指數。

所以,你應該在max if改變這樣的事情:

if(rangeOfNumbers[indexOfMax] < rangeOfNumbers[j]) 
{ 
    indexOfMax = j; 
} 

繼續這種變化對其他行自己。

1

不知道你能怎麼連編譯代碼:

int *rangeOfNumbers = new int[]; 

你需要,當你新的整數數組來指定大小。

int *rangeOfNumbers = new int[5]; 

我下GCC 4.5.3編譯,得到了以下錯誤:

error: expected primary-expression before ‘]’ token 

您還需要記住指數maxmin當你掃描陣列。

例如: 的for循環之前,初始化:

int maxIndex = -1; 

在for循環中:

if (max < A[i]) 
{ 
    maxIndex = i; 
    max = A[i]; 
} 

類似的東西應該爲min來完成。

+0

@MostafaR更新。謝謝。 – taocp

+0

這是在Visual Studio '12下編譯的。 – Klinetel

1

這可能與您正在尋找的東西很遠。 但是,如果您要執行一些密集型算法,例如查找最大值和最小值,您應該習慣於stl容器(向量,列表和所有這些東西)。

好處是許多算法已經可用並且針對性能進行了優化。

我認爲你的例子只是一個練習。反正她是如何如果它不是

例如,這個問題是使用矢量的理想選擇。下面是一個例子

#include <iostream> 
#include<vector> 
#include<algorithm> 

using namespace std; 


int main() 
{ 

    int number=0, min=0, max=0; 
    vector<int> rangeOfNumbers; 

    cout<<"Enter 5 numbers: "; 

    for(int i=0; i<5;i++) 
    { 
     cout<<"Enter number "<<i+1<<": "; 
     cin>>number; 
     rangeOfNumbers.push_back(number); 
    } 

    vector<int>::iterator maxelem = max_element(rangeOfNumbers.begin(), rangeOfNumbers.end()); 
    vector<int>::iterator minelem = min_element(rangeOfNumbers.begin(), rangeOfNumbers.end()); 

    cout << endl << "Max number: " << (*maxelem) << " at " << std::distance(rangeOfNumbers.begin(), maxelem) + 1; 
    cout << endl << "Min number: " << (*minelem)<< " at " << std::distance(rangeOfNumbers.begin(), minelem) + 1; 

    cin.get(); 

    return 0; 
} 
0

我會建議一個微小的優化,如果你在項目0初始化分鐘最大爲什麼同一元素

for (int I = 0;

到位

再問

for (int I = 1;

源代碼:

#include <iostream> 

using namespace std; 

#define SIZE 5 

int main() 
{ 

    int min=0, max=0; 
    int *rangeOfNumbers = new int[SIZE]; 

    cout<<"Enter 5 numbers: "; 

    for(int i=0; i < SIZE; i++) 
    { 
     cout<<"Enter number " << i + 1 <<": "; 
     cin>>rangeOfNumbers[i]; 
    } 

    //max min array positions 

    min = rangeOfNumbers[0]; 
    max = rangeOfNumbers[0]; 

    int minindex = 0; 
    int maxindex = 0; 

    //find max and mins 
    for(int j = 1; j < SIZE; j++) 
    { 
     if(max < rangeOfNumbers[j]) 
     { 
      max = rangeOfNumbers[j]; 
      maxindex = j; 
     } 
     if(min > rangeOfNumbers[j]) 
     { 
      min = rangeOfNumbers[j]; 
      minindex = j; 
     } 
    } 

    maxindex += 1; 
    minindex += 1; 

    cout<<"\n\nMin number: "<<min; 
    cout<<"\nMax number: "<<max; 

    cin.get(); 
    cin.get(); 

    return 0; 
} 
相關問題