infoarena

infoarena - concursuri, probleme, evaluator, articole => Teme => Subiect creat de: Todirica Adrian din Octombrie 09, 2014, 15:16:03



Titlul: Ajutor problema secventa maximala cls a X-a
Scris de: Todirica Adrian din Octombrie 09, 2014, 15:16:03
Buna ziua. Am nevoie de ajutor la o problema la care ma chinui de vreo 2 zile si nu iese. Enuntul suna asa: Fisierul "date.in" contine mai multe valori. Mutati intr-un vector secventa cuprinsa intre primul si ultimul numar negativ ( se presupune ca sunt cel putin 2 numere negative ).
Problema ar fi usoara daca as putea la citirea fisierului ( while(f>>x) ) sa le mut intr-un vector. Ideea e ca trebuie sa o fac direct din citire , asta nu-mi iese.
Multumesc anticipat !


Titlul: Răspuns: Ajutor problema secventa maximala cls a X-a
Scris de: Robert Badea din Decembrie 14, 2014, 14:31:21
Nu poți face acest lucru direct din citire deoarece nu știi când vine ultimul număr negativ. Tot ce poți face e să salvezi începând de la primul număr negativ și după să scapi de tot ce este după ultimul număr negativ. Ai mai jos un exemplu cum ai putea face acest lucru.

Cod:
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main() {

  ifstream f("date.in");

  int x;

  bool on = false;
  int last = -1;

  vector <int> secv;

  while (f >> x) {
    if (x < 0) {
      on = true;
    }

    if (on) {
      secv.push_back(x);
    }
  }

  while (secv[secv.size() - 1] > 0) {
    secv.pop_back();
  }

  for (int i = 0; i < (int)secv.size(); ++i) {
    cout << secv[i] << " ";
  }
  cout << "\n";

  return 0;
}

Edit: scuze, acum abia acum am văzut că postul e de acum 7000 de ani.