我需要找到包含N
个元素的数组的最小值和最大值。事实是我的程序正在运行,但是当我在网站上提交该程序时,我只从32
中得到100
点,我不知道出了什么问题。
#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;
}
答案 0 :(得分:5)
您的逻辑
min = N;
max = N;
用N
初始化它们是错误的。当您在用户输入中输入最小数目(例如0
)并且您的N
大于0
时,您将找不到最小数目。最大也会发生同样的情况。
以min
的最大可能值初始化int
,以最小的值初始化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;
}
如果要查找已经存在的数组的最小值-最大值,则可以考虑使用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;
,为什么?看到这篇文章:Why is “using namespace std” considered bad practice?
答案 1 :(得分:2)
根据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的最大和最小限制
#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;
}