#c
#c
Вопрос:
У меня возникли проблемы с этим набором кодов, и я понятия не имею, почему, поэтому цель этого кода — получить значение фигуры песочных часов в матрице. Например.
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
И это предназначено для получения максимального количества из всех возможных песочных часов, поэтому для тех, кто не понимает код, это предназначено для примера,
1 1 1
1
1 1 1
Это форма песочных часов, предполагается, что она находит максимальное из всех значений и выводит его, в этом случае максимальное значение будет равно 19. Но по какой-то причине, когда значения в матрице отрицательные, мой cout всегда возвращает 0 вместо отрицательного числа, и я не понимаю почему. Было бы здорово, если бы кто-нибудь мог меня просветить. Спасибо.
0 -4 -6 0 -7 -6
-1 -2 -6 -8 -3 -1
-8 -4 -2 -8 -8 -6
-3 -1 -2 -5 -7 -4
-3 -5 -3 -6 -6 -6
-3 -6 0 -8 -6 -7
Пример отрицательного ввода.
int main()
{
vector<vector<int>> arr(6);
for (int i = 0; i < 6; i ) {
arr[i].resize(6);
for (int j = 0; j < 6; j ) {
cin >> arr[i][j];
}
cin.ignore(numeric_limits<streamsize>::max(), 'n');
}
int maximumoutput = 0;
int temp = 0;
for(int r = 0; r < 4; r ){
for(int i = 0; i < 4; i ){
for(int c = i; c < i 3; c ){
temp = arr[r][c];
temp = arr[r 2][c];
}
temp = arr[r 1][i 1];
maximumoutput = temp > maximumoutput ? temp : maximumoutput;
temp = 0;
}
}
cout << maximumoutput;
return 0;
}
Ответ №1:
Это потому, что вы инициализировали значение maximumoutput с 0. Таким образом, вы никогда не получите значения ниже 0 из-за этой проверки:
maximumoutput = temp > maximumoutput ? temp : maximumoutput;
Чтобы исправить, вам нужно инициализировать maximumoutput с минимально возможным значением
maximumoutput = std::numeric_limits<int>::min();
Ответ №2:
это потому, что вы инициализировали max на 0 .. и результат кода должен быть -19, а это меньше 0, который был первым значением для max
вам нужно добавить условие, которое проверяет, находитесь ли вы в первой из матрицы, подобной этой
int main()
{
vector<vector<int>> arr(6);
for (int i = 0; i < 6; i ) {
arr[i].resize(6);
for (int j = 0; j < 6; j ) {
cin >> arr[i][j];
}
cin.ignore(numeric_limits<streamsize>::max(), 'n');
}
int maximumoutput = 0;
int temp = 0;
for(int r = 0; r < 4; r ){
for(int i = 0; i < 4; i ){
for(int c = i; c < i 3; c ){
temp = arr[r][c];
temp = arr[r 2][c];
}
temp = arr[r 1][i 1];
// here edition
if(r == 0 amp;amp; i==0){
maximumoutput = temp;
}
maximumoutput = temp > maximumoutput ? temp : maximumoutput;
temp = 0;
}
}
cout << maximumoutput;
return 0;
}