Меняется результат выполнения программы при добавлении строки вывода
Добавление в код единственной строки
cout << "Tickets " << tickets << endl;
в корне меняет результат выполнения программы.
Почему это происходит?
Программа должна находить минимально возможную сумму обедов, при условии, что если стоимость обеда выше 100, то покупатель получает купон на бесплатный обед.

Строка 73, Код:
#include <iostream>
#include <cstdlib>
using namespace std;
const int N = 100;
const int INF = 1e+9;
void mySort(int (&arr)[N][N], int size, int row) {
for (int i = size - 1; i >= 0; i--) {
int tmp;
for (int j = 0; j < i; j++) {
if (arr[row][j] > arr[row][j + 1]) {
tmp = arr[row][j];
arr[row][j] = arr[row][j + 1];
arr[row][j + 1] = tmp;
}
}
}
}
int findMaxInRange(int const (&arr)[N][N], int row, int from, int to) {
int max = arr[row][from];
int idx;
for (int i = from; i < to; i++) {
if (arr[row][i] > max) {
max = arr[row][i];
idx = i;
}
}
return idx;
}
void dupeRows(int (&arr)[N][N], int size) {
for (int i = 1; i < size; i++) {
for (int j = 0; j < size; j++) {
arr[i][j] = arr[0][j];
}
}
}
void arrOutput(int (&arr)[N][N], int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
}
int main() {
int n;
int arr[N][N];
cin >> n;
if (n < 0 || n > N) return EXIT_SUCCESS;
for (int i = 0; i < n; i++) {
cin >> arr[0][i];
if (arr[0][i] < 0 || arr[0][i] > 300) return EXIT_SUCCESS;
}
mySort(arr, n, 0);
dupeRows(arr, n);
int ticket_idx = 0;
for (int i = 0; i < n; i++) {
if (arr[0][i] > 100) {
ticket_idx = i;
break;
}
}
int tickets = n - ticket_idx;
// cout << "Tickets " << tickets << endl;
if (tickets != n) {
for (int i = 1; i < n; i++) {
if (tickets == n - ticket_idx) {
for (int j = 0; j < tickets; j++) {
arr[i][findMaxInRange(arr, i, 0, ticket_idx)] = 0;
}
}
else {
for (int j = 0; j < n - ticket_idx - tickets; j++) {
arr[i][findMaxInRange(arr, i, ticket_idx, n)] = 0;
}
for (int j = 0; j < tickets - (n - ticket_idx - tickets); j++) {
arr[i][findMaxInRange(arr, i, 0, ticket_idx)] = 0;
}
}
tickets--;
if (!tickets) break;
}
}
else {
for (int i = 1; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][findMaxInRange(arr, i, 0, n)] = 0;
}
tickets--;
if (!tickets) break;
}
}
arrOutput(arr, n);
int sum, minsum = INF;
for (int i = 0; i < n; i++) {
sum = 0;
for (int j = 0; j < n; j++) {
sum += arr[i][j];
}
if (sum < minsum) minsum = sum;
}
cout << minsum << endl;
return EXIT_SUCCESS;
}
Ответы (1 шт):
Вас не смущает то, что компилятор ругается на потенциальное использование неинициализированной переменной? т.е. в программе имеется потенциально неопределенное поведение?...
И оно не потенциальное: например, при ваших входных данных в в findMaxInRange переменная idx не получает никакого определенного значения, и возвращает какой-то мусор, который хранился в этом месте в памяти.
Добавление вывода немного меняет стек, а также и мусор в неинициализированном значении, вот вы и получаете разные результаты.