查找数字字段中的最大和

Posted

技术标签:

【中文标题】查找数字字段中的最大和【英文标题】:Finding the maximum sum in a field of numbers 【发布时间】:2017-11-27 12:08:35 【问题描述】:

我必须编写一个程序,对数组的顺序元素求和并输出最大和。正如您将看到的,如果所有元素都是负数,我的算法将不起作用。

#include <iostream>

int main()

    int nums[1000] = -1,-3,-4,-2,-5,-1,-9,-4,-2,-2;
    int sums[100][100];
    int n = 9;

    for(int i = 0; i <= n; i++) 
        for(int j = n; j >= i; j--) 
            for(int k = j; k >= i; k--) 
                sums[i][j] += nums[k];
            
        

    

    int max_sum = 0; 
    int max_begin;
    int max_end;

     for(int i = 0; i <= n; i++) 
        for(int j = i+1; j <= n; j++)
                std::cout << "i = " << i << " j = " << j << ": " << sums[i][j] << "\n";
            if(max_sum < sums[i][j]) 
                max_sum = sums[i][j];
                max_begin = i;
                max_end = j;
                
            
        

    std::cout << "Maximum: " << max_sum << " bei i = " << max_begin << " bis j = " << max_end;

    return 0;

我已经尝试过这个解决方案

#include <climits>
...
int max_sum = INT_MIN;
...

虽然这工作得很好,但我们的讲座还没有限制,所以我正在寻找另一种方法。

【问题讨论】:

为什么不能你使用climitsstd::numeric_limits 怎么样?您故意避免使用规范解决方案,但为了什么? 我可以使用climits。但我认为必须有一个替代解决方案,因为我们的讲座还没有限制,我有兴趣知道它。 我应该如何使用std::numeric_limits?我看不到如何将它集成到我的代码中 【参考方案1】:

改为:

int max_sum = sums[0][0];

这样你就不用担心数字的范围了。

【讨论】:

但是会依赖一个非空范围。 我倾向于不从字面上理解运动问题。你不应该用最佳实践来回答吗?【参考方案2】:

这是std::optional 类型的主要动机之一(当范围内的所有值都有效时)。如果你不能使用它,我们可以用一个简单的布尔值来模仿它:

bool max_set = false;
int max_sum = 0;

// ...
if (!max_set || max_sum < sums[i][j])
   max_set = true;
   max_sum = sums[i][j];

如果我们愿意,我们可以创建一个简单的类来进一步模仿它(未经测试的代码):

class optional_int
   bool is_set = false;
   int value = 0;
public:
   bool operator()() constreturn is_set;
   int& operator=(int _value)value = _value; is_set=true; return value;
   int& get()
      if (!is_set)throw std::logic_error("attempting to access unset optional");
      return value;
;

optional_int max_sum;
//...
if (!max_sum || max_sum.get() < sums[i][j])
   max_sum = sums[i][j];

我们可以继续使这种类型越来越通用,但我们只会重新实现std::optional

【讨论】:

以上是关于查找数字字段中的最大和的主要内容,如果未能解决你的问题,请参考以下文章

在Java中查找数组中的最小和最大数

按数字查找的最大和最小数字[关闭]

在 txt 文件中查找最小和最大数字

如何从数组中的数字中找到最大和最小数字[重复]

mysql中多个字段中的最大值

数据库查询每个字段对应的最大值