C++中的沙漏,hackerrank [复制]

pvcm50d1  于 2023-10-20  发布在  其他
关注(0)|答案(5)|浏览(151)

此问题已在此处有答案

Uninitialized variable behaviour in C++(4个答案)
3天前关闭。
我试图在HackerRank上用C++解决Hourglass problem问题。
任务如下:* 给定一个6x6二维数组,A:*

  • 我们将A中的沙漏定义为指数落入A的图形表示中的这种模式的值的子集:a B c d e f 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。所以当我没有用最小可能值初始化max值时,我的if(max<sum){ ... }条件不能正常工作。
然而,在用最小的最小值初始化max之后,它工作得很好。你知道这个可能的值是从哪里来的吗?内存中是否有转储数据?

fjnneemd

fjnneemd1#

如果你没有为max指定一个初始值,那么它的值就是那个时候在那个内存地址上的值。使用初始化内存是一种未定义的行为,其值可以是任何值。

klsxnrf1

klsxnrf12#

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

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;
}
vc9ivgsu

vc9ivgsu3#

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
zlhcx6iw

zlhcx6iw4#

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)
jtw3ybtb

jtw3ybtb5#

/*
 * Complete the 'hourglassSum' function below.
 *
 * The function is expected to return an INTEGER.
 * The function accepts 2D_INTEGER_ARRAY arr as parameter.
 */

function hourglassSum(arr) {
// Write your code here
var arr2 = [];
var sum;
var result;
for (let i = 0; i<4; i++) {
    for (let j = 0; j<4; j++) {
        sum = 0;
        sum = 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];
        arr2.push(sum);
    }
}

result = arr2.reduce((a, b) => {
    return (a > b ? a : b);
});

return result;

}

相关问题