找到数组的最低元素
finding the lowest element of an array
所以我尝试使用 if 和 else if 循环找到具有最低值的元素。
我输入了这个确切的东西来找到最高值。
就像我从字面上复制并粘贴相同的代码,只是更改了符号。
那个功能完美。
但是为了找到这段代码中的最低值,它只是返回 month1 = 0 并且值为 0。
我认真地逐行扫描,看看是否有问题。
但我真的搞不清楚哪里出了问题,这有点令人沮丧。
请帮忙。
最低的变量是双精度。
变量 month1 是一个整数。
if(rainfall[0] < rainfall[1] & rainfall[0] < rainfall[2] & rainfall[0] < rainfall[3]
& rainfall[0] < rainfall[4] & rainfall[0] < rainfall[5] & rainfall[0] < rainfall[6]
& rainfall[0] < rainfall[7] & rainfall[0] < rainfall[8] & rainfall[0] < rainfall[9]
& rainfall[0] < rainfall[10] & rainfall[0] < rainfall[11])
{
lowest = rainfall[0];
month1 = 1;
}
else if(rainfall[1] < rainfall[0] & rainfall[1] < rainfall[2] & rainfall[1] < rainfall[3]
& rainfall[1] < rainfall[4] & rainfall[1] < rainfall[5] & rainfall[1] < rainfall[6]
& rainfall[1] < rainfall[7] & rainfall[1] < rainfall[8] & rainfall[1] < rainfall[9]
& rainfall[1] < rainfall[10] & rainfall[1] < rainfall[11])
{
lowest = rainfall[1];
month1 = 2;
}
else if(rainfall[2] < rainfall[0] & rainfall[2] < rainfall[1] & rainfall[2] < rainfall[3]
& rainfall[2] < rainfall[4] & rainfall[2] < rainfall[5] & rainfall[2] < rainfall[6]
& rainfall[2] < rainfall[7] & rainfall[2] < rainfall[8] & rainfall[2] < rainfall[9]
& rainfall[2] < rainfall[10] & rainfall[2] < rainfall[11])
{
lowest = rainfall[2];
month1 = 3;
}
else if(rainfall[3] < rainfall[0] & rainfall[3] < rainfall[1] & rainfall[3] < rainfall[2]
& rainfall[3] < rainfall[4] & rainfall[3] < rainfall[5] & rainfall[3] < rainfall[6]
& rainfall[3] < rainfall[7] & rainfall[3] < rainfall[8] & rainfall[3] < rainfall[9]
& rainfall[3] < rainfall[10] & rainfall[3] < rainfall[11])
{
lowest = rainfall[3];
month1 = 4;
}
else if(rainfall[4] < rainfall[1] & rainfall[4] < rainfall[2] & rainfall[4] < rainfall[3]
& rainfall[4] < rainfall[0] & rainfall[4] < rainfall[5] & rainfall[4] < rainfall[6]
& rainfall[4] < rainfall[7] & rainfall[4] < rainfall[8] & rainfall[4] < rainfall[9]
& rainfall[4] < rainfall[10] & rainfall[4] < rainfall[11])
{
lowest = rainfall[4];
month1 = 5;
}
else if(rainfall[5] < rainfall[1] & rainfall[5] < rainfall[2] & rainfall[5] < rainfall[3]
& rainfall[5] < rainfall[4] & rainfall[5] < rainfall[0] & rainfall[5] < rainfall[6]
& rainfall[5] < rainfall[7] & rainfall[5] < rainfall[8] & rainfall[5] < rainfall[9]
& rainfall[5] < rainfall[10] & rainfall[5] < rainfall[11])
{
lowest = rainfall[5];
month1 = 6;
}
else if(rainfall[6] < rainfall[0] & rainfall[6] < rainfall[1] & rainfall[6] < rainfall[2]
& rainfall[6] < rainfall[3] & rainfall[6] < rainfall[4] & rainfall[6] < rainfall[5]
& rainfall[6] < rainfall[7] & rainfall[6] < rainfall[8] & rainfall[6] < rainfall[9]
& rainfall[6] < rainfall[10] & rainfall[6] < rainfall[11])
{
lowest = rainfall[6];
month1 = 7;
}
else if(rainfall[7] < rainfall[1] & rainfall[7] < rainfall[2] & rainfall[7] < rainfall[3]
& rainfall[7] < rainfall[4] & rainfall[7] < rainfall[5] & rainfall[7] < rainfall[6]
& rainfall[7] < rainfall[0] & rainfall[7] < rainfall[8] & rainfall[7] < rainfall[9]
& rainfall[7] < rainfall[10] & rainfall[7] < rainfall[11])
{
lowest = rainfall[7];
month1 = 8;
}
else if(rainfall[8] < rainfall[1] & rainfall[8] < rainfall[2] & rainfall[8] < rainfall[3]
& rainfall[8] < rainfall[4] & rainfall[8] < rainfall[5] & rainfall[8] < rainfall[6]
& rainfall[8] < rainfall[7] & rainfall[8] < rainfall[0] & rainfall[8] < rainfall[9]
& rainfall[8] < rainfall[10] & rainfall[8] < rainfall[11])
{
lowest = rainfall[8];
month1 = 9;
}
else if(rainfall[9] < rainfall[1] & rainfall[9] < rainfall[2] & rainfall[9] < rainfall[3]
& rainfall[9] < rainfall[4] & rainfall[9] < rainfall[5] & rainfall[9] < rainfall[6]
& rainfall[9] < rainfall[7] & rainfall[9] < rainfall[8] & rainfall[9] < rainfall[0]
& rainfall[9] < rainfall[10] & rainfall[9] < rainfall[11])
{
lowest = rainfall[9];
month1 = 10;
}
else if(rainfall[10] < rainfall[1] & rainfall[10] < rainfall[2] & rainfall[10] < rainfall[3]
& rainfall[10] < rainfall[4] & rainfall[10] < rainfall[5] & rainfall[10] < rainfall[6]
& rainfall[10] < rainfall[7] & rainfall[10] < rainfall[8] & rainfall[10] < rainfall[9]
& rainfall[10] < rainfall[0] & rainfall[10] < rainfall[11])
{
lowest = rainfall[10];
month1 = 11;
}
else if(rainfall[11] < rainfall[1] & rainfall[11] < rainfall[2] & rainfall[11] < rainfall[3]
& rainfall[11] < rainfall[4] & rainfall[11] < rainfall[5] & rainfall[11] < rainfall[6]
& rainfall[11] < rainfall[7] & rainfall[11] < rainfall[8] & rainfall[11] < rainfall[9]
& rainfall[11] < rainfall[10] & rainfall[11] < rainfall[0])
{
lowest = rainfall[11];
month1 = 12;
}
如评论中所述,您正在使用 &
BITWISE AND 运算符,而您应该使用 &&
LOGICAL AND 运算符。
但即便如此,您提供的代码中没有循环,只有一大堆 if
,效率很低,容易出错,而且难以维护。使用 actual 循环将大大简化代码并解决您的问题,例如:
double lowest = rainfall[0];
int month1 = 1;
for(int i = 1; i < 12 ++i) {
if (rainfall[i] < lowest) {
lowest = rainfall[i];
month1 = i + 1;
}
}
最高值也是如此:
double highest = rainfall[0];
int month1 = 1;
for(int i = 1; i < 12 ++i) {
if (rainfall[i] > highest) {
highest = rainfall[i];
month1 = i + 1;
}
}
也就是说,考虑改用标准 std::min_element()
and std::max_element()
算法:
#include <algorithm>
auto iter = std::min_element(rainfall, rainfall + 12);
double lowest = *iter;
int lowest_month1 = std::distance(rainfall, iter) + 1;
iter = std::max_element(rainfall, rainfall + 12);
double highest = *iter;
int highest_month1 = std::distance(rainfall, iter) + 1;
或者,标准 std::minmax_element()
算法:
#include <algorithm>
auto iters = std::minmax_element(rainfall, rainfall + 12);
double lowest = *(iters.first);
double highest = *(iters.second);
int lowest_month1 = std::distance(rainfall, iters.first) + 1;
int highest_month1 = std::distance(rainfall, iters.second) + 1;
所以我尝试使用 if 和 else if 循环找到具有最低值的元素。
我输入了这个确切的东西来找到最高值。
就像我从字面上复制并粘贴相同的代码,只是更改了符号。
那个功能完美。
但是为了找到这段代码中的最低值,它只是返回 month1 = 0 并且值为 0。
我认真地逐行扫描,看看是否有问题。
但我真的搞不清楚哪里出了问题,这有点令人沮丧。
请帮忙。
最低的变量是双精度。
变量 month1 是一个整数。
if(rainfall[0] < rainfall[1] & rainfall[0] < rainfall[2] & rainfall[0] < rainfall[3]
& rainfall[0] < rainfall[4] & rainfall[0] < rainfall[5] & rainfall[0] < rainfall[6]
& rainfall[0] < rainfall[7] & rainfall[0] < rainfall[8] & rainfall[0] < rainfall[9]
& rainfall[0] < rainfall[10] & rainfall[0] < rainfall[11])
{
lowest = rainfall[0];
month1 = 1;
}
else if(rainfall[1] < rainfall[0] & rainfall[1] < rainfall[2] & rainfall[1] < rainfall[3]
& rainfall[1] < rainfall[4] & rainfall[1] < rainfall[5] & rainfall[1] < rainfall[6]
& rainfall[1] < rainfall[7] & rainfall[1] < rainfall[8] & rainfall[1] < rainfall[9]
& rainfall[1] < rainfall[10] & rainfall[1] < rainfall[11])
{
lowest = rainfall[1];
month1 = 2;
}
else if(rainfall[2] < rainfall[0] & rainfall[2] < rainfall[1] & rainfall[2] < rainfall[3]
& rainfall[2] < rainfall[4] & rainfall[2] < rainfall[5] & rainfall[2] < rainfall[6]
& rainfall[2] < rainfall[7] & rainfall[2] < rainfall[8] & rainfall[2] < rainfall[9]
& rainfall[2] < rainfall[10] & rainfall[2] < rainfall[11])
{
lowest = rainfall[2];
month1 = 3;
}
else if(rainfall[3] < rainfall[0] & rainfall[3] < rainfall[1] & rainfall[3] < rainfall[2]
& rainfall[3] < rainfall[4] & rainfall[3] < rainfall[5] & rainfall[3] < rainfall[6]
& rainfall[3] < rainfall[7] & rainfall[3] < rainfall[8] & rainfall[3] < rainfall[9]
& rainfall[3] < rainfall[10] & rainfall[3] < rainfall[11])
{
lowest = rainfall[3];
month1 = 4;
}
else if(rainfall[4] < rainfall[1] & rainfall[4] < rainfall[2] & rainfall[4] < rainfall[3]
& rainfall[4] < rainfall[0] & rainfall[4] < rainfall[5] & rainfall[4] < rainfall[6]
& rainfall[4] < rainfall[7] & rainfall[4] < rainfall[8] & rainfall[4] < rainfall[9]
& rainfall[4] < rainfall[10] & rainfall[4] < rainfall[11])
{
lowest = rainfall[4];
month1 = 5;
}
else if(rainfall[5] < rainfall[1] & rainfall[5] < rainfall[2] & rainfall[5] < rainfall[3]
& rainfall[5] < rainfall[4] & rainfall[5] < rainfall[0] & rainfall[5] < rainfall[6]
& rainfall[5] < rainfall[7] & rainfall[5] < rainfall[8] & rainfall[5] < rainfall[9]
& rainfall[5] < rainfall[10] & rainfall[5] < rainfall[11])
{
lowest = rainfall[5];
month1 = 6;
}
else if(rainfall[6] < rainfall[0] & rainfall[6] < rainfall[1] & rainfall[6] < rainfall[2]
& rainfall[6] < rainfall[3] & rainfall[6] < rainfall[4] & rainfall[6] < rainfall[5]
& rainfall[6] < rainfall[7] & rainfall[6] < rainfall[8] & rainfall[6] < rainfall[9]
& rainfall[6] < rainfall[10] & rainfall[6] < rainfall[11])
{
lowest = rainfall[6];
month1 = 7;
}
else if(rainfall[7] < rainfall[1] & rainfall[7] < rainfall[2] & rainfall[7] < rainfall[3]
& rainfall[7] < rainfall[4] & rainfall[7] < rainfall[5] & rainfall[7] < rainfall[6]
& rainfall[7] < rainfall[0] & rainfall[7] < rainfall[8] & rainfall[7] < rainfall[9]
& rainfall[7] < rainfall[10] & rainfall[7] < rainfall[11])
{
lowest = rainfall[7];
month1 = 8;
}
else if(rainfall[8] < rainfall[1] & rainfall[8] < rainfall[2] & rainfall[8] < rainfall[3]
& rainfall[8] < rainfall[4] & rainfall[8] < rainfall[5] & rainfall[8] < rainfall[6]
& rainfall[8] < rainfall[7] & rainfall[8] < rainfall[0] & rainfall[8] < rainfall[9]
& rainfall[8] < rainfall[10] & rainfall[8] < rainfall[11])
{
lowest = rainfall[8];
month1 = 9;
}
else if(rainfall[9] < rainfall[1] & rainfall[9] < rainfall[2] & rainfall[9] < rainfall[3]
& rainfall[9] < rainfall[4] & rainfall[9] < rainfall[5] & rainfall[9] < rainfall[6]
& rainfall[9] < rainfall[7] & rainfall[9] < rainfall[8] & rainfall[9] < rainfall[0]
& rainfall[9] < rainfall[10] & rainfall[9] < rainfall[11])
{
lowest = rainfall[9];
month1 = 10;
}
else if(rainfall[10] < rainfall[1] & rainfall[10] < rainfall[2] & rainfall[10] < rainfall[3]
& rainfall[10] < rainfall[4] & rainfall[10] < rainfall[5] & rainfall[10] < rainfall[6]
& rainfall[10] < rainfall[7] & rainfall[10] < rainfall[8] & rainfall[10] < rainfall[9]
& rainfall[10] < rainfall[0] & rainfall[10] < rainfall[11])
{
lowest = rainfall[10];
month1 = 11;
}
else if(rainfall[11] < rainfall[1] & rainfall[11] < rainfall[2] & rainfall[11] < rainfall[3]
& rainfall[11] < rainfall[4] & rainfall[11] < rainfall[5] & rainfall[11] < rainfall[6]
& rainfall[11] < rainfall[7] & rainfall[11] < rainfall[8] & rainfall[11] < rainfall[9]
& rainfall[11] < rainfall[10] & rainfall[11] < rainfall[0])
{
lowest = rainfall[11];
month1 = 12;
}
如评论中所述,您正在使用 &
BITWISE AND 运算符,而您应该使用 &&
LOGICAL AND 运算符。
但即便如此,您提供的代码中没有循环,只有一大堆 if
,效率很低,容易出错,而且难以维护。使用 actual 循环将大大简化代码并解决您的问题,例如:
double lowest = rainfall[0];
int month1 = 1;
for(int i = 1; i < 12 ++i) {
if (rainfall[i] < lowest) {
lowest = rainfall[i];
month1 = i + 1;
}
}
最高值也是如此:
double highest = rainfall[0];
int month1 = 1;
for(int i = 1; i < 12 ++i) {
if (rainfall[i] > highest) {
highest = rainfall[i];
month1 = i + 1;
}
}
也就是说,考虑改用标准 std::min_element()
and std::max_element()
算法:
#include <algorithm>
auto iter = std::min_element(rainfall, rainfall + 12);
double lowest = *iter;
int lowest_month1 = std::distance(rainfall, iter) + 1;
iter = std::max_element(rainfall, rainfall + 12);
double highest = *iter;
int highest_month1 = std::distance(rainfall, iter) + 1;
或者,标准 std::minmax_element()
算法:
#include <algorithm>
auto iters = std::minmax_element(rainfall, rainfall + 12);
double lowest = *(iters.first);
double highest = *(iters.second);
int lowest_month1 = std::distance(rainfall, iters.first) + 1;
int highest_month1 = std::distance(rainfall, iters.second) + 1;