【问题标题】:Find the product of elements located between the maximum and minimum elements of an array查找位于数组的最大和最小元素之间的元素的乘积
【发布时间】: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 &lt; min; i++) max+1 什么时候会小于 min?
  • fwiw,好名字很难,但花一些时间总是值得的。 max_valuemax_index 而不仅仅是 max 会使错误变得明显
  • 附注:(!(a &lt; b)) 应改为(a &gt;= b)。还可以考虑使用来自 &lt;random&gt; 的 C++ RNG,而不是使用 C 风格的 rand()。还可以考虑使用std::minmax_element() 来查找最小/最大元素,并使用std::accumulate() 来计算总和和乘积,而不是使用手动循环。还可以考虑使用std::vector 而不是new[]
  • 顺便说一句,使用std::minmax_elementstd::accumulate 使它成为一个3 或4 行C++ 程序,没有任何手动编码循环。

标签: c++ arrays


【解决方案1】:

您的问题是您将数组索引与数组值混淆了。

在这里,您将max(与min 相同)分配给数组

max = lpi_arr[i];

在这里,您将max(与min 相同)视为数组索引

for (int i = max + 1; i < min; i++)
    Prod *= lpi_arr[i];

【讨论】:

  • 你能帮我如何使用 min max 作为数组值重写它
  • @arcend 实际上,如果我是你,我会走另一条路。让max/min 一直是数组索引。我不会为您编写代码,但如果您在使其正常工作时遇到特定问题,您可以提出另一个问题。
猜你喜欢
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 2021-11-13
  • 2017-03-01
  • 1970-01-01
  • 2021-05-09
相关资源
最近更新 更多