沙漏在c ++中,hackerrank

时间:2017-11-28 22:48:10

标签: c++ hourglass

我试图解决C ++中的沙漏问题。 任务如下 给出6x6 2D阵列,A:
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
我们将A中的沙漏定义为值的子集,其索引在A的图形表示中落在此模式中: a b c   d e g g A中有16个沙漏,沙漏总和是沙漏值的总和。 任务 计算A中每个沙漏的沙漏总和,然后打印最大沙漏总和。

对于这个问题,我写了代码:

int main(){
    vector< vector<int> > arr(6,vector<int>(6));
    int max , sum;
    for(int arr_i = 0;arr_i < 6;arr_i++){
       for(int arr_j = 0;arr_j < 6;arr_j++){
          cin >> arr[arr_i][arr_j];
       }
    }
    for(int arr_i = 0; arr_i < 4; arr_i++){
       for(int arr_j = 0; arr_j < 4; arr_j++){
           sum = arr[arr_i][arr_j] + arr[arr_i][arr_j+1] + arr[arr_i][arr_j+2] + arr[arr_i+1][arr_j+1] + arr[arr_i+2][arr_j] + arr[arr_i+2][arr_j+1] + arr[arr_i+2][arr_j+2];
           if(sum > max) {
               max = sum;
           }
       }
    }
    cout << max << endl;
    return 0;
}


如果我没有初始化int max = -63,这是沙漏的最小可能总和,则max变量会在其中存储正值,例如4198560。因此我的if(max<sum){ ... }条件无法正常工作,因为我没有使用最小可能值来最大化最大值。
但是,在使用最小值初始化max之后,它可以正常工作。你知道这个可能的价值来自哪里吗?它是内存中的转储数据吗? 谢谢

3 个答案:

答案 0 :(得分:2)

如果你没有指定max的初始值,那么它的值就是当时在该内存地址处发生的任何值。使用单元化内存是未定义的行为,值可以是任何值。

答案 1 :(得分:0)

如果我是您,我将使用INT_MIN,这意味着将使用int数据类型中的最小值初始化变量,并对Long使用LLONG_MIN,但是为什么呢?确保您的变量具有最小值。这是代码:

int hourglass_sum(vector<vector<int>> arr)
{
    int sum ,result = INT_MIN;
    for(int row=0; row <= 3 ; ++row)
    {
        for(int column = 0 ; column <=3 ; ++column)
        {
            sum = arr[row][column] + arr[row][column+1] + arr[row][column+2] +                           arr[row+1][column+1] +arr[row+2][column] + arr[row+2][column+1] +                                   arr[row + 2][column+2];
            result = max(result,sum);
        }
    }


    return result;
}

答案 2 :(得分:0)

def hourglassSum(arr): #code is in python
    # want to find the maximum hourglass sum
    # minimum hourglass sum = -9 * 7 = -63
    max_sum = -9*7
    new_list = []
    for i in range(0,4):
        for j in range(0,4):
            # sum of top 3 elements
            level1 = sum(arr[i][j:j+3])

            # sum of mid element
            level2 = arr[i+1][j+1]

            # sum of bottom 3 elements
            level3 = sum(arr[i+2][j:j+3])

            max_number = level1+level2+level3
            new_list.append(max_number)
    max_sum = max(new_list)
    return max_sum