Я пытался решить проблему с песочными часами в C ++.
Задача следующая
Учитывая 6×6 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:
а б в
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, тогда это значение будет тем, что происходит по этому адресу памяти в это время. Использование унифицированной памяти — неопределенное поведение, значение может быть любым.
Других решений пока нет …