import java.util.*; import java.io.*; class Fisier { double lungime; int nrOrdine; public Fisier(double lungime, int nrOrdine) { this.lungime = lungime; this.nrOrdine = nrOrdine; } } class FisiereBenzi { Fisier []fis; int n; double lungimeBanda; public FisiereBenzi(String numeFisier) { BufferedReader b; boolean linia1 = false; int i = 0; String linie; try { b = new BufferedReader(new FileReader(numeFisier)); while( ( linie = b.readLine() ) != null) { StringTokenizer st = new StringTokenizer(linie, " \t"); if(!linia1) { n = Integer.parseInt(st.nextToken()); fis = new Fisier[n]; lungimeBanda = (Double.valueOf(st.nextToken())).doubleValue(); linia1 = true; } while(st.hasMoreTokens()) fis[i++] = new Fisier((Double.valueOf(st.nextToken())).doubleValue(), i - 1); } }catch(FileNotFoundException e) { System.out.println("Eroare la deschiderea fisierului " + numeFisier + "."); } catch(IOException f) { System.out.println("Eroare de I/E."); } } void sortare() { boolean sortat; int i, tempInt; double temp = 0; do { sortat = true; for(i = 0; i < n - 1; i++) if(fis[i].lungime < fis[i+1].lungime) { temp = fis[i].lungime; tempInt = fis[i].nrOrdine; fis[i].lungime = fis[i+1].lungime; fis[i].nrOrdine = fis[i+1].nrOrdine; fis[i+1].lungime = temp; fis[i+1].nrOrdine = tempInt; sortat = false; } }while(!sortat); } void greedy() { double suma = 0, copieLungimeBanda = lungimeBanda; int ordineTemp[], k = 0; ordineTemp = new int[n]; for(int i = 0; i < n; i++) { if(fis[i].lungime <= copieLungimeBanda) { ordineTemp[k++] = i; copieLungimeBanda -= fis[i].lungime; } } System.out.println("Fisierele asezate pe banda magnetica:"); for(int i = 0; i < k; i++) System.out.println("Fisier " + fis[ordineTemp[i]].nrOrdine + " cu lungimea " + fis[ordineTemp[i]].lungime); } public static void main(String []args) { FisiereBenzi fb = new FisiereBenzi("Date.txt"); fb.sortare(); fb.greedy(); try { System.out.println("Apasati o tasta pentru a continua..."); System.in.read(); }catch(IOException e) {} } }