我试图解决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/