hourglass in c++, hackerrank

hourglass in c++, hackerrank

本文关键字:hackerrank c++ in hourglass      更新时间:2023-10-16

我试图在hackerrank上解决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 dE F GA中有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(这是最小可能的沙漏总和),则最大变量存储正值,例如其中的4198560。因此,当我不以最小可能的值初始化最大值时,我的if(max<sum){ ... }条件无法正常工作。

但是,在以最低最小值初始化最大值后,它的工作正常。您知道这种可能的价值从何而来吗?是否在内存中是转储数据?

如果您没有指定最大值的初始值,则该值是当时恰好在该内存地址的任何内容。使用单位化的内存是未定义的行为,该值可能是任何事物。

如果我是您,我将使用INT_MIN,这意味着将您的变量以int数据类型中的最低值初始化,并长时间使用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;
}
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
arr = []
for _ in range(6):
    tmp = [int(x) for x in str(input()).split(" ")]
    arr.append(tmp)
maximum = -9 * 7
for i in range(6):
    for j in range(6):
        if j + 2 < 6 and i + 2 < 6:
            result = arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i + 1][j + 1] + arr[i + 2][j] + arr[i + 2][j + 1] + arr[i + 2][j + 2]
            if result > maximum:
                maximum = result
print(maximum)