此问题已在此处有答案:
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之后,它工作得很好。你知道这个可能的值是从哪里来的吗?内存中是否有转储数据?
5条答案
按热度按时间fjnneemd1#
如果你没有为max指定一个初始值,那么它的值就是那个时候在那个内存地址上的值。使用初始化内存是一种未定义的行为,其值可以是任何值。
klsxnrf12#
如果我是你,我会使用
INT_MIN
,这意味着将使用int
数据类型中的最小值初始化变量,并使用LLONG_MIN
作为Long,但为什么呢?确保变量的值最小。代码如下:vc9ivgsu3#
zlhcx6iw4#
jtw3ybtb5#
}