![](/img/trans.png)
[英]Find the product of elements located between the maximum and minimum elements of an array
[英]Find the minimum and maximum of an array with N elements
我需要找到具有N
元素的数组的最小值和最大值。 事实是我的程序正在运行,但是当我在网站上提交该程序时,我得到100
分中只有32
分,而我不知道出了什么问题。
#include <iostream>
using namespace std;
int main() {
int N,min,max;
cin >> N;
min = N;
max = N;
int i,x;
for (i = 1; i <= N; ++i) {
cin >> x;
if ( x < min ) {
min = x;
}
if (x > max) {
max = x;
}
}
cout << min <<" "<< max;
return 0;
}
你的逻辑在这里
min = N;
max = N;
用N
初始化它们是错误的。 当用户输入中有最小值(例如0
并且N
大于0
,您永远找不到最小值。 最大也会发生同样的情况。
用int
最大可能值初始化min
用最小可能的值初始化max
,如下所示:
int min = std::numeric_limits<int>::max();
int max = std::numeric_limits<int>::min();
看起来您不想保存用户输入来查找mim和max,因此可以使用std::min
和std::max
函数,如下所示:
#include <iostream>
#include <limits> // std::numeric_limits<>
#include <algorithm> // std::min, std::max
int main()
{
// initialize like this
int min = std::numeric_limits<int>::max();
int max = std::numeric_limits<int>::min();
int N;
std::cin >> N;
while (N--)
{
int x; std::cin >> x;
min = std::min(x, min); // use std::min
max = std::max(x, max); // use std::max
}
std::cout << min << " " << max;
return 0;
}
如果要查找已经存在的数组的min-max,则可以考虑使用std :: minmax_element代替。
#include <algorithm> // std::minmax_element
#include <iostream>
#include <vector>
int main()
{
int N; std::cin >> N;
std::vector<int> v(N);
for(auto& element: v) std::cin >> element;
// do something.....
// to find min-max of the array
auto result = std::minmax_element(v.begin(), v.end());
std::cout << "min element is: " << *result.first << '\n';
std::cout << "max element is: " << *result.second << '\n';
}
边注 :不要练std namespüace std;
,为什么呢? 看到这篇文章: 为什么“使用命名空间标准”被认为是不好的做法?
如vivek_23所建议,将第一个元素用作最小值和最大值:
#include <iostream>
using namespace std;
int main()
{
int N,min,max;
cin >> N;
cin>>min;
max = min;
int i,x;
for (i = 1; i < N; ++i){
cin >> x;
if ( x < min ){
min = x;
}
if (x > max){
max = x;
}
}
cout << min <<" "<< max;
return 0;
}
替代解决方案:添加额外的标头并使用int max和min限制
#include <iostream>
#include <cmath>
#include <climits>
using namespace std;
int main()
{
int N,min,max;
cin >> N;
min = INT_MAX; //take largest value
max = INT_MIN; //take smallest value
int i,x;
for (i = 1; i <= N; ++i){
cin >> x;
if ( x < min ){
min = x;
}
if (x > max){
max = x;
}
}
cout << min <<" "<< max;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.