1

我正在尝试编写一个简单的逻辑程序来找到已经完成的最高和最低值。问题是如何找到索引位置是当它找到最高和最低值时。见附图。 在此处输入图像描述

#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

5 回答 5

4

除了更新 min 和 max 之外,还保留一个索引变量并更新它。

//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;
于 2013-03-31T21:45:39.193 回答
1

max将and更改minindexOfMaxand indexOfMin,因为通过存储最大索引,您可以访问最大索引和最大值。

所以你应该把它改成max if这样:

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

自己继续对其他行进行此更改。

于 2013-03-31T21:48:17.353 回答
1

不知道如何编译代码:

int *rangeOfNumbers = new int[];

新建整数数组时需要指定大小。

int *rangeOfNumbers = new int[5];

我在 gcc 4.5.3 下编译,得到以下错误:

 error: expected primary-expression before ‘]’ token

您还需要记住扫描数组的索引max和时间。min

例如:在for循环之前,初始化:

int maxIndex = -1;

for循环内部:

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

应该为min.

于 2013-03-31T21:48:17.717 回答
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;
}
于 2013-03-31T22:03:19.607 回答
0

我建议进行微小的优化,如果您在第 0 项初始化minmax为什么再次要求相同的元素

对于 (int I = 0;

到位

对于 (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;
}
于 2014-11-09T03:41:11.713 回答