我正在尝试编写一个简单的逻辑程序来查找已经完成的最高和最低值。问题是如何在找到最高和最低值时找到索引位置。见附图。
#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;
}
答案 0 :(得分: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;
答案 1 :(得分:1)
将max
和min
更改为indexOfMax
和indexOfMin
,因为通过存储最大索引,您可以访问最大索引和最大值。
因此,您应该将max if
更改为以下内容:
if(rangeOfNumbers[indexOfMax] < rangeOfNumbers[j])
{
indexOfMax = j;
}
自己继续对其他行进行此更改。
答案 2 :(得分: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;
Inside for循环:
if (max < A[i])
{
maxIndex = i;
max = A[i];
}
min
应该做类似的事情。
答案 3 :(得分: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;
}
答案 4 :(得分:0)
如果您在第0项初始化 min 和 max ,我建议进行一次微小的优化,为什么再次询问相同的元素
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;
}