c++ - C++ 中的沙漏,hackerrank

标签 c++

我试图解决Hourglass problem 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 的图形表示中索引落入此模式的值的子集: ABC d 埃夫格 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 后,它工作得很好。你知道这个可能的值从哪里来吗?转储数据是否在内存中?

最佳答案

如果您没有为 max 指定初始值,那么它的值就是当时该内存地址上发生的任何值。使用统一内存是未定义的行为,该值可以是任何值。

关于c++ - C++ 中的沙漏,hackerrank,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47542218/

相关文章:

c++ - 读取和写入进程 I/O?

C++ 存储输入行

c++ - 使用构造函数参数初始化结构数组

c++ - Variadic 类模板和继承 - 默认编译器生成的构造函数

c++ - 如何使用 C++ 以编程方式更新组策略?

python - 使用 UDP 套接字将 C++ 结构转换为 Python

c++ - 如何解释嵌套的继承类结构?

c++ - 从 void* 到 int* 的无效转换

c++ - 模板实例化的范围解析

c++ - outData.txt 没有输出正确的值