fbpx

Problema #3198 – Optimize – Rezolvari PBInfo

de Mihai-Alexandru

Programul de mai jos citește din fișierul input.txt un vector de elemente întregi și construiește în memorie (apoi scrie în fișierul output.txt) un vector care conține aceleași elemente, doar că având toate elementele egale cu 0 la final. Ordinea celorlalte elemente se păstrează.

Exemplu

input.txt

10
0 3 8 0 0 3 8 7 0 10

output.txt

10
3 8 3 8 7 10 0 0 0 0

Codul programului

/*
    Acadnet 2017 - Etapa Interjudeteana
    Problema A - Optimize Nule
*/
#include <iostream>
#include <vector>
#include <fstream>
#include <stdlib.h>
#define INPUT_FILENAME "input.txt"
#define OUTPUT_FILENAME "output.txt"
/*
    Aceasta este singura functie pe care aveti
    voie sa o modificati / rescrieti.
*/
void nule(std::vector<int> &v)
{
    int i, j, aux, size = v.size();
    bool swaped;
    for(i = 0; i < size - 1; i++) {
        swaped = false;
        for(j = 0; j < size - i - 1; j++) {
            if(v[j] == 0) {
                aux = v[j];
                v[j] = v[j+1];
                v[j+1] = aux;
                swaped = true;
            }
        }
        if(!swaped)
            break;
    }
}
int main(void)
{
    std::vector<int> v;
    int size, i, x;
    std::ifstream input_file;
    std::ofstream output_file;
    // Read vector from input file
    input_file.open(INPUT_FILENAME);
    if(!input_file.good()) {
        std::cout << "Failed to open " << INPUT_FILENAME << std::endl;
        exit(-1);
    }
    input_file >> size;
    v.reserve(size);
    for(i = 0; i < size; i++) {
        input_file >> x;
        v.push_back(x);
    }
    input_file.close();
    // Call nule() function
    nule(v);
    // Print vector to output file
    output_file.open(OUTPUT_FILENAME);
    if(!output_file.good()) {
        std::cout << "Failed to open " << OUTPUT_FILENAME << std::endl;
        exit(-1);
    }
    output_file << size << std::endl;
    for(i = 0; i < size; i++)
        output_file << v[i] << " ";
    output_file << std::endl;
    output_file.close();
    return 0;
}
void nule(std::vector<int> &v)
{
    int n = v.size();
    int poz = 0;
    for(int i = 0; i < n; ++i)
        if(v[i] != 0)
            v[poz] = v[i], poz++;
    for(int i = poz; i < n; ++i)
        v[i] = 0;
}
Comentarii

S-ar putea sa iti placa