[英]List minimum and maximum value in array
我需要列出数组中的最小值和最大值。 例如,我有 10 个 arrays,所以我需要列出数组中的 5 个最小值和 5 个最大值。 我想让我的程序可以做到这一点.. 例子
{1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5} {1.2 < 3.5, 4.5 < 8.9, 2.4 < 6.5, 7.8 < 3.3, 6.5 < 9.5}
如果数字小则赢 赢:1.2 4.5 2.4 3.3 6.5 输:3.5 8.9 6.5 7.8 9.5
我已经在代码中尝试了许多循环样式和 boolean。
#include <iostream>
using namespace std;
int main(){
//double arr[2] = {1.2, 3.5};
double arr[10] = {1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5};
double min = arr[0];
double max = arr[0];
double Sdata[5] = {0};
double Bdata[5] = {0};
int counterMin = 0;
int counterMax = 0;
for(int i = 1; i<10; i++){
if(arr[i]<max || arr[i]> max){
max = arr[i];
if(counterMax<5){
Bdata[counterMax] = max;
counterMax++;
}
max = arr[i+1];
}
if(arr[i]<min || arr[i]> min){
//min = arr[i];
if(counterMin<5){
Sdata[counterMin] = min;
counterMin++;
}
min = arr[i+1];
}
}
//Output
cout<<"Minimum: "<<endl;
for(int w = 0; w<5; w++){
cout<<Sdata[w]<<" ";
}
cout<<endl;
cout<<"Maximum: "<<endl;
for(int j = 0; j<5; j++){
cout<<Bdata[j]<<" ";
}
return 0;
}
Output from the program is:
Minimum:
1.2 4.5 2.4 7.8 6.5
Maximum:
3.5 8.9 6.5 3.3 9.5
I expect the output from the program is:
Minimum:
1.2 4.5 2.4 3.3 6.5
Maximum:
3.5 8.9 6.5 7.8 9.5
C++ 实际上提供了帮助您找到容器/数组中的最小和最大元素的算法:
#include <algorithm>
#include <iterator>
#include <iostream>
int main()
{
const double arr[] = {1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5};
auto [min, max] = std::minmax_element(std::begin(arr), std::end(arr));
std::cout << "Min: " << *min << "\n";
std::cout << "Max: " << *max << "\n";
}
您可以使用std::min_element() 、 std::max_element()以防您只需要其中一个。
首先,由于问题被标记为 C++,我认为您最好只使用std::vector
而不是 arrays。
除此之外,如果您想对数组对进行排序,您可以使用类似的东西。
#include <vector>
int main()
{
std::vector<double> arr{1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5};
std::vector<double> maxs(arr.size()/2);
std::vector<double> mins(arr.size()/2);
double max, min;
for (unsigned i = 0; i < arr.size()/2; ++i)
{
min = arr[2*i];
max = arr[2*i + 1];
if (min > max) std::swap(min, max);
maxs[i] = max;
mins[i] = min;
}
return 0;
}
这只是一个简单的片段,没有错误/绑定检查等......
您还可以检查您的原始向量是否包含偶数个元素,然后相应地打开 go 。
如果我没有正确理解某些内容或犯了任何错误,请随时纠正我!
我建议使用std::minmax_element
。 它不需要像使用std::min_element
和std::max_element
的方法那样对数组进行两次迭代。
此外,我建议使用std::array
而不是 POD C 数组
#include <algorithm>
#include <array>
#include <iterator>
#include <iostream>
int main() {
std::array<double,10> arr {1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5};
const auto [min, max] = std::minmax_element(std::begin(arr), std::end(arr));
std::cout << "min = " << *min << ", max = " << *max << '\n';
}
如果您要做的只是列出相邻数字的最小/最大对,那么只需要做以下事情:
#include <iostream>
#include <algorithm>
int main()
{
double arr[10] = { 1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5 };
const int sz = (sizeof(arr) / sizeof(arr[0])); // number of elements
const int outsize = sz / 2; // number of elements in output array
double Sdata[outsize] = { 0 };
double Bdata[outsize] = { 0 };
// loop for each pair
for (int i = 0; i < sz - 1; i += 2)
{
// minimum in Sdata, maximum in Bdata
Sdata[i / 2] = std::min(arr[i], arr[i + 1]);
Bdata[i / 2] = std::max(arr[i], arr[i + 1]);
}
//Output
std::cout << "Minimum: \n";
for (int w = 0; w < 5; w++) {
std::cout << Sdata[w] << " ";
}
std::cout << "\n";
std::cout << "Maximum: \n";
for (int j = 0; j < 5; j++) {
std::cout << Bdata[j] << " ";
}
}
Output:
Minimum:
1.2 4.5 2.4 3.3 6.5
Maximum:
3.5 8.9 6.5 7.8 9.5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.