hourglass in c++, hackerrank
hourglass in c++, hackerrank
我试图在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的图形表示中属于该模式:a b c dE F GA中有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
(这是最小可能的沙漏总和),则最大变量存储正值,例如其中的4198560
。因此,当我不以最小可能的值初始化最大值时,我的if(max<sum){ ... }
条件无法正常工作。
但是,在以最低最小值初始化最大值后,它的工作正常。您知道这种可能的价值从何而来吗?是否在内存中是转储数据?
如果您没有指定最大值的初始值,则该值是当时恰好在该内存地址的任何内容。使用单位化的内存是未定义的行为,该值可能是任何事物。
如果我是您,我将使用INT_MIN
,这意味着将您的变量以int
数据类型中的最低值初始化,并长时间使用LLONG_MIN
,但是为什么?为了确保您的变量具有最低的值。这是代码:
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;
}
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
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)
相关文章:
- 请发现它在 dev 中工作的错误,但在 hackerrank 中不起作用
- C++中的Hackerrank楼梯
- 代码在我的系统上运行良好,但在 HackerRank 提交时出现分段错误
- HackerRank说~对标准输出没有回应~.C++
- Array Manipulation of HackerRank 背后的逻辑
- hourglass in c++, hackerrank
- 不可分割的子集- Hackerrank
- 没有指针的c++分段错误(HackerRank)
- 这是HackerRank的错误解决方案
- C /c++ hackerrank,我的代码是工作的,但我得到0.38 /10分(不知道为什么)代码工作