我试图解决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
f
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指定初始值,那么它的值就是当时那个内存地址处的值。使用单元化内存是未定义的行为,该值可以是任何值。
关于c++ - C++中的沙漏,hackerrank,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47542218/