【发布时间】:2021-12-27 19:43:46
【问题描述】:
#include <iostream>
using namespace std;
int main()
{
int n, a, b,min,max, Prod = 1, Sum = 0;
cout << "Initialize an array n: ";
cin >> n;
do
{
cout << "Input the start value: ";
cin >> a;
cout << "Input the end value: ";
cin >> b;
if (!(a < b))
{
cout << "a is bigger than b, please enter new values " << endl;
continue;
}
} while (!(a < b));
int* lpi_arr;
lpi_arr = new int[n];
srand(time(NULL));
cout << "Int numbers from " << a << " to " << b << endl;
for (int i = 0; i < n; i++)
{
lpi_arr[i] = rand() % (b - a) + a;
cout << lpi_arr[i] << " ";
}
max = lpi_arr[0];
for (int i = 0; i < n; i++)
{
if (max < lpi_arr[i])
max = lpi_arr[i];
}
min = lpi_arr[0];
for (int i = 0; i < n; i++)
{
if (min > lpi_arr[i])
min = lpi_arr[i];
}
cout << "\nmin element is = " << min << endl;
cout << "\nmax element is = " << max << endl;
for (int i = max + 1; i < min; i++)
Prod *= lpi_arr[i];
for (int i = 0; lpi_arr[i] < 0 && i < n; i++)
Sum += lpi_arr[i];
cout << "Summ =" << Sum << endl << "Prod = " << Prod << endl;
delete[] lpi_arr;
}
此代码的主要目的是计算数组的负数之和,以及位于数组的最大和最小元素之间的元素的乘法。
问题是代码只实现了 1(one) 作为答案,我不知道如何更改它。代码的所有其他部分都运行良好,但如果您有任何建议,我也想阅读它。等待您的帮助。
【问题讨论】:
-
“代码仅实现 1(one) 作为答案”:这是什么意思?
-
在这一行:
for (int i = max + 1; i < min; i++)max+1 什么时候会小于 min? -
fwiw,好名字很难,但花一些时间总是值得的。
max_value和max_index而不仅仅是max会使错误变得明显 -
附注:
(!(a < b))应改为(a >= b)。还可以考虑使用来自<random>的 C++ RNG,而不是使用 C 风格的rand()。还可以考虑使用std::minmax_element()来查找最小/最大元素,并使用std::accumulate()来计算总和和乘积,而不是使用手动循环。还可以考虑使用std::vector而不是new[]。 -
顺便说一句,使用
std::minmax_element和std::accumulate使它成为一个3 或4 行C++ 程序,没有任何手动编码循环。