Cod sursa(job #3194725)

Utilizator sarbullSirbu Nicolae-Cezar sarbull Data 19 ianuarie 2024 02:07:02
Problema Jocul Flip Scor 10
Compilator c-64 Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <stdio.h>

// Funcție pentru inversarea unei linii
void flipRow(int matrix[][100], int row, int cols) {
    for (int i = 0; i < cols; i++) {
        matrix[row][i] *= -1;
    }
}

// Funcție pentru inversarea unei coloane
void flipCol(int matrix[][100], int col, int rows) {
    for (int i = 0; i < rows; i++) {
        matrix[i][col] *= -1;
    }
}

// Funcție pentru afișarea matricei într-un fișier
void printMatrixToFile(FILE *outputFile, int matrix[][100], int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            fprintf(outputFile, "%d ", matrix[i][j]);
        }
        fprintf(outputFile, "\n");
    }
}

int main() {
    FILE *inputFile, *outputFile;
    int matrix[100][100];
    int rows, cols;

    // Deschiderea fișierului de intrare
    inputFile = fopen("flip.in", "r");
    if (inputFile == NULL) {
        printf("Eroare la deschiderea fisierului de intrare.\n");
        return 1;
    }

    // Citire dimensiuni
    fscanf(inputFile, "%d %d", &rows, &cols);

    // Citire elemente
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            fscanf(inputFile, "%d", &matrix[i][j]);
        }
    }

    // Aplicarea operațiilor de inversare pentru a maximiza suma
    for (int i = 0; i < rows; i++) {
        if (matrix[i][0] < 0) {
            flipRow(matrix, i, cols);
        }
    }

    for (int j = 0; j < cols; j++) {
        int negativeCount = 0;
        for (int i = 0; i < rows; i++) {
            if (matrix[i][j] < 0) {
                negativeCount++;
            }
        }
        if (negativeCount > rows / 2) {
            flipCol(matrix, j, rows);
        }
    }

    // Deschiderea fișierului de ieșire
    outputFile = fopen("flip.out", "w");
    if (outputFile == NULL) {
        printf("Eroare la deschiderea fisierului de iesire.\n");
        fclose(inputFile);
        return 1;
    }

    // Afișarea tablei finale în fișierul de ieșire
    printMatrixToFile(outputFile, matrix, rows, cols);

    // Închiderea fișierelor
    fclose(inputFile);
    fclose(outputFile);

    return 0;
}